Compare commits
12 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
39f2d349b5 | ||
|
|
c0a8416229 | ||
|
|
92883c53dc | ||
|
|
5b31463d9c | ||
|
|
7489d32183 | ||
|
|
30e0313357 | ||
|
|
1afd68d485 | ||
|
|
c2d44cb333 | ||
|
|
9f1a209f4f | ||
|
|
f7433d9426 | ||
|
|
444aace15f | ||
|
|
5face13bc5 |
3
.gitignore
vendored
@@ -41,7 +41,8 @@ selfdrive/boardd/boardd
|
||||
selfdrive/logcatd/logcatd
|
||||
selfdrive/mapd/default_speeds_by_region.json
|
||||
selfdrive/proclogd/proclogd
|
||||
selfdrive/ui/_ui
|
||||
|
||||
|
||||
selfdrive/test/longitudinal_maneuvers/out
|
||||
selfdrive/visiond/visiond
|
||||
selfdrive/loggerd/loggerd
|
||||
|
||||
711
CHANGELOGS-DEV.md
Normal file
@@ -0,0 +1,711 @@
|
||||
dragonpilot 0.8.7-4
|
||||
========================
|
||||
* 2017 JADE w/ Added Comma Pedal Support. (Thanks to @lijunhao731)
|
||||
* Fixed toyota / honda brake light display. (Thanks to @loveloveses)
|
||||
* Fixed UI toggle. (Thanks to @鄧育林、@謝聖鴻)
|
||||
* Fixed VW resume/display issue. (Thanks to @SKY)
|
||||
* Fixed CJK font installation issue.
|
||||
|
||||
dragonpilot 0.8.7-3
|
||||
========================
|
||||
* Bug fixes.
|
||||
* Fixed gpxd.
|
||||
* Added some Chinese support.
|
||||
|
||||
dragonpilot 0.8.7-2
|
||||
========================
|
||||
* Fixed sound issue.
|
||||
* Changed gpx logs to OSM compatible format.
|
||||
* HONDA: Added BSM support for CRV-Hybrid.
|
||||
* HONDA: Added toggle to force displaying km/h in HUD.
|
||||
* TOYOTA: Add new Toggles under DP - Cars to enable/disable Following Modes / Accel Modes with physical button feature.
|
||||
|
||||
dragonpilot 0.8.7-1
|
||||
========================
|
||||
* Based on openpilot 0.8.7 devel.
|
||||
* Support 1+3t / C2 / Jetson Xavier NX.
|
||||
* Support White / Grey Panda.
|
||||
* TOYOTA: Can now change Following Modes with physical button from the steering wheel.
|
||||
* TOYOTA: Can now change Acceleration Modes with physical button if your car supports it.
|
||||
* TOYOTA: Added Low speed override toggles.
|
||||
* Dev UI now displays RPM reading.
|
||||
* Added Prebuilt toggle for faster boot.
|
||||
* Lexus RX high RPM fix. (Thanks to @crazysim).
|
||||
* Added toggle to launch Language settings.
|
||||
* Added toggle to launch Volume settings.
|
||||
* Added toggle to launch date/time settings.
|
||||
* Added toggle to flash panda.
|
||||
* Added toggle to recover panda firmware.
|
||||
* Added toggle to delete logging (/sdcard/realdata).
|
||||
* Added GPS Logger.
|
||||
|
||||
dragonpilot 0.8.6-1
|
||||
========================
|
||||
* Based on openpilot 0.8.6 devel.
|
||||
* Support 1+3t / C2 / Jetson Xavier NX.
|
||||
* Support White / Grey Panda.
|
||||
|
||||
dragonpilot 0.8.5-4
|
||||
========================
|
||||
* Added multiple toggles.
|
||||
* Code clean up.
|
||||
* Android app support. (see selfdrive/dragonpilot/HOWTO-APPD.md)
|
||||
* Better support for VW MPQ (Thanks to @Saber)
|
||||
|
||||
dragonpilot 0.8.5-3
|
||||
========================
|
||||
* Added Jetson support toggle.
|
||||
* Added Steering Ratio controller.
|
||||
* Reduce Following Profile to 3 modes only. (1.8s / 1.5s / 1.2s)
|
||||
* Bug fixes.
|
||||
|
||||
dragonpilot 0.8.5-2
|
||||
========================
|
||||
* Added black panda simulation toggle.
|
||||
* Added No GPS toggle.
|
||||
* Added No Battery Toggle.
|
||||
* Bug fixes.
|
||||
|
||||
dragonpilot 0.8.5-1
|
||||
========================
|
||||
* Based on openpilot 0.8.5 devel.
|
||||
* 基於 openpilot 0.8.5 devel.
|
||||
* Support 1+3t / C2 / Jetson Xavier NX.
|
||||
* 支持 1+3t / C2 / Jetson Xavier NX.
|
||||
* No White/Grey Panda Support.
|
||||
* 不支持白灰熊.
|
||||
|
||||
dragonpilot 0.8.4-3
|
||||
========================
|
||||
* 簡化 1+3t 安裝方法. (請查閱 HOWTO-ONEPLUS.md)
|
||||
* Simplied 1+3t installation. (See HOWTO-ONEPLUS.md)
|
||||
* 加回舊 ssh 登錄.
|
||||
* Good old ssh key.
|
||||
* 修復本田錯誤. (感謝 @loveloveses)
|
||||
* Fixed Honda bug. (Thanks to @loveloveses)
|
||||
|
||||
dragonpilot 0.8.4-2
|
||||
========================
|
||||
* 加回可調整加速/跟車設定.
|
||||
* Added back Accel/Following Profile.
|
||||
* 支持 Headless Jetson Xavier NX (https://github.com/efinilan/xnxpilot.git)
|
||||
* Support Headless Jetson Xavier NX (https://github.com/efinilan/xnxpilot.git)
|
||||
* 支持 1+3t (需額外安裝手續)
|
||||
* Support 1+3t (Require additional install procedure)
|
||||
* 支持白/灰熊
|
||||
* Support White/Grey Panda.
|
||||
|
||||
dragonpilot 0.8.4-1
|
||||
========================
|
||||
* 基於 openpilot 0.8.4 devel.
|
||||
* Based on openpilot 0.8.4 devel.
|
||||
|
||||
dragonpilot 0.8.1
|
||||
========================
|
||||
* 基於最新 openpilot 0.8.1 devel.
|
||||
* Based on latest openpilot 0.8.1 devel.
|
||||
* 加入行車記錄按鈕。(感謝 @toyboxZ 提供)
|
||||
* Added REC screen button. (Thanks to @toyboxZ)
|
||||
|
||||
dragonpilot 0.8.0
|
||||
========================
|
||||
* 基於最新 openpilot 0.8.0 devel.
|
||||
* Based on latest openpilot 0.8.0 devel.
|
||||
* 加入 git 錯誤修正。(感謝 @toyboxZ 提供)
|
||||
* Added git error fix. (Thanks to @toyboxZ)
|
||||
|
||||
dragonpilot 0.7.10.1
|
||||
========================
|
||||
* HYUNDAI_GENESIS 使用 INDI 控制器。(感謝 @donfyffe 提供)
|
||||
* HYUNDAI_GENESIS uses INDI controller. (Thanks to @donfyffe)
|
||||
* HYUNDAI_GENESIS 加入 Cruise 按紐 和 lkMode 支援。(感謝 @donfyffe 建議)
|
||||
* HYUNDAI_GENESIS added Cruise button event and lkMode feature. (Thanks to @donfyffe)
|
||||
* 支援台灣版 2018 Huyndai IONIQ + smart MDPS (dp_hkg_smart_mdps) (感謝 @andy741217 提供)
|
||||
* Support 2018 Taiwan Hyundai IONIQ + smart MDPS (dp_hkg_smart_mdps) (Thanks to @andy741217)
|
||||
* 使用 openpilot v0.8 的模型。(感謝 @eisenheim)
|
||||
* Use openpilot v0.8 model. (Thanks to @eisenheim)
|
||||
* 加入 0.8 測試版的部分優化。
|
||||
* Added optimizations from pre-0.8.
|
||||
* 加入 dp_honda_eps_mod 設定來使用更高的扭力 (需 eps mod)。(感謝 @Wuxl_369 提供)
|
||||
* Added dp_honda_eps_mod setting to enable higher torque (eps mod required). (Thanks to @Wuxl_369)
|
||||
* 修正 VW 對白/灰熊的支援 (感謝 @lirudy 提供)
|
||||
* Fixed issue with white/grey panda support for VW (Thanks to @lirudy)
|
||||
* GENESIS_G70 優化 (感謝 @sebastian4k 提供)
|
||||
* GENESIS_G70 Optimisation (Thanks to @sebastian4k)
|
||||
* HYUNDAI_GENESIS 優化 (感謝 @donfyffe 提供)
|
||||
* HYUNDAI_GENESIS Optimisation (Thanks to @donfyffe)
|
||||
* 加入 Dynamic gas Lite。(感謝 @toyboxZ 提供)
|
||||
* Added Dynamic Gas Lite. (Thanks to @toyboxZ)
|
||||
* 加入來自 afa 的 Honda inspire, accord, crv SnG 優化。(感謝 @menwenliang 提供)
|
||||
* Added Honda inspire, accord, crv SnG optimisation from afa fork. (Thanks to @menwenliang)
|
||||
* 加入 dp_toyota_lowest_cruise_override_vego。(感謝 @toyboxZ 提供)
|
||||
* Added dp_toyota_lowest_cruise_override_vego. (Thanks to @toyboxZ)
|
||||
|
||||
dragonpilot 0.7.10.0
|
||||
========================
|
||||
* 基於最新 openpilot 0.7.10 devel.
|
||||
* Based on latest openpilot 0.7.10 devel.
|
||||
* 修正 Prius 特定情況下無法操控方向盤的問題。
|
||||
* Fixed unable to regain Prius steering control under certain condition.
|
||||
* 更新 VW MQB 的支援。(需執行 scripts/vw.sh 腳本)
|
||||
* Updated support of VW MQB. (scripts/vw.sh script required)
|
||||
* 新增 2018 China Toyota CHR 指紋v2。(感謝 @xiaohongcheung 提供)
|
||||
* Added 2018 China Toyota CHR FPv2. (Thanks to @xiaohongcheung)
|
||||
* 加入 Headunit Reloaded Android Auto App 支援。(感謝 @Ninjaa 提供)
|
||||
* Added Headunit Reloaded Android Auto App Support. (Thanks to @Ninjaa)
|
||||
* 優化 nanovg。(感謝 @piggy 提供)
|
||||
* Optomized nanovg. (Thanks to @piggy)
|
||||
* 加入 complete_setup.sh (感謝 @深鲸希西 提供)
|
||||
* Added complete_setup.sh (Thanks to @深鲸希西)
|
||||
* Based on latest openpilot 0.7.10 devel.
|
||||
* 修正 EON 接 PC/USB 充電器時仍會自動關機的錯誤。(感謝 @小愛 回報)
|
||||
* Fixed auto shutdown issue when EON connect to PC/USB Charger. (Thanks to @LOVEChen)
|
||||
* HYUNDAI_GENESIS 使用 INDI 控制器。(感謝 @donfyffe 提供)
|
||||
* HYUNDAI_GENESIS uses INDI controller. (Thanks to @donfyffe)
|
||||
|
||||
dragonpilot 0.7.8.3
|
||||
========================
|
||||
* VW 加入 6 分鐘時間方向盤控制限制輔助方案。(特別感謝 @actuallylemoncurd 提供代碼)
|
||||
* VW added 6 minutes timebomb assist. (dp_timebomb_assist, special thanks to @actuallylemoncurd)
|
||||
|
||||
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)
|
||||
* Added d_poly offset. (Thanks to @ShaneSmiskol)
|
||||
* 加入 ZSS 支援。(感謝 @bobbydough, @WilliamPrius 建議, @bobbydough 測試)
|
||||
* Added ZSS support. (Thanks to @bobbydough, @WilliamPrius for recommendation, @bobbydough for testing)
|
||||
* 加入錯誤記錄至 /sdcard/crash_logs/ (感謝 @ShaneSmiskol 提供代碼)
|
||||
* Added error logs to /sdcard/crash_logs/ (Special Thanks to @ShaneSmiskol)
|
||||
* 加入 LQR 控制器開關進設定畫面。
|
||||
* Added LQR Controller toggle to settings.
|
||||
|
||||
dragonpilot 0.7.7.1
|
||||
========================
|
||||
* 加入 C2 風扇靜音模式。(感謝 @dingliangxue)
|
||||
* Added C2 quiet fan mode. (Thanks to @dingliangxue)
|
||||
* 加入「輔助換道最低啟動速度」、「自動換道最低啟動速度」設定。
|
||||
* Added "Assisted Lane Change Min Engage Speed" and "Auto Lane Change Min Engage Speed" settings.
|
||||
* 加入回調校介面。(感謝 @Kent)
|
||||
* Re-added Dev UI. (Thanks to @Kent)
|
||||
* 加入 "dp_lqr" 設定來強制使用 RAV4 的 lqr 調校。(感謝 @eisenheim)
|
||||
* Added "dp_lqr" setting to force enable lqr tuning from RAV4. (Thanks to eisenheim)
|
||||
|
||||
dragonpilot 0.7.7.0
|
||||
========================
|
||||
* 基於最新 openpilot 0.7.7 devel.
|
||||
* Based on latest openpilot 0.7.7 devel.
|
||||
* 當 Manager 出現錯誤時,顯示 IP 位置。(感謝 @dingliangxue)
|
||||
* When Manager failed, display IP address. (Thanks to @dingliangxue)
|
||||
* 加回 sr learner 開關。
|
||||
* Re-added sr learner toggle.
|
||||
* 加回 加速模式 開關。
|
||||
* Re-added Accel Profile toggle.
|
||||
* Toyota 加入改寫最低巡航速度功能。(感謝 @Mojo)
|
||||
* Added Toyota to override lowerest cruise speed. (Thanks to @Mojo)
|
||||
* 介面加入盲點偵測顯示。(感謝 @wabes)
|
||||
* Added BSM indicator to UI. (Thanks to @wabes)
|
||||
* 加回彎道減速功能。(感謝 @Mojo)
|
||||
* re-added Slow On Curve functionality. (Thanks to @Mojo)
|
||||
|
||||
dragonpilot 0.7.6.2
|
||||
========================
|
||||
* 修正無法正確關閉駕駛監控的問題。
|
||||
* Fixed unable to properly turn off driver monitor issue.
|
||||
|
||||
dragonpilot 0.7.6.1
|
||||
========================
|
||||
* 基於最新 openpilot 0.7.6.1 devel.
|
||||
* Based on latest openpilot 0.7.6.1 devel.
|
||||
* 優化並整合 dp 服務。 (所有的設定檔已改名,請重新設定所有的功能)
|
||||
* Optimized and integrated several dp services. (Settings have been renamed, please re-config all settings)
|
||||
* 完全關閉 steer ratio learner。
|
||||
* Completely disabled steer ratio learner.
|
||||
* 移除「加速模式」。
|
||||
* Removed Accel Profile.
|
||||
* 加入本田皓影混電版指紋v1。(感謝 @劉駿)
|
||||
* Added Honda Breeze Hybrid FPv1. (Thanks to @劉駿)
|
||||
* 加入台灣版 Toyota Prius 4.5 指紋v1。(感謝 @jeekid)
|
||||
* Added Taiwan Toyota Prius 4.5 FPv1. (Thanks to @jeekid)
|
||||
|
||||
dragonpilot 0.7.5.4
|
||||
========================
|
||||
* Dynamic Follow 更新模型。(感謝 @ShaneSmiskol 提供代碼、 @cgw1968 測試)
|
||||
* Updated Dynamic Follow model. (Special Thanks to @ShaneSmiskol for the feature and @cgw1968 for testing)
|
||||
|
||||
dragonpilot 0.7.5.3
|
||||
========================
|
||||
* Dynamic Follow 更新至 ShaneSmiskol:stock_additions 0.7.5 版。(感謝 @ShaneSmiskol 提供代碼、 @Wei 測試)
|
||||
* Updated Dynamic Follow to ShaneSmiskol:stock_additions 0.7.5. (Special Thanks to @ShaneSmiskol for the feature and @Wei for testing)
|
||||
* 優化 Lexus GSH 轉向。(感謝 @簡銘佑 測試)
|
||||
* Optimize Lexus GSH steering. (Thanks to @簡銘佑)
|
||||
* C2 支援自動關機「DragonAutoShutdownAt」參數。(感謝 @cgw1968 建議)
|
||||
* C2 to support auto shutdown "DragonAutoShutDownAt" param. (Thanks to @cgw1968)
|
||||
* 修正出現「pedalPressed」的錯誤。(感謝 @Wei 回報)
|
||||
* Fixed issue showing "pedalPressed" error. (Thanks to @Wei)
|
||||
* 將剎車狀熊顯示於 dp 資訊欄。
|
||||
* Added brake indicator to dp infobar.
|
||||
* 修正「溫度監控」燈示。
|
||||
* Fixed "Temp monitor" indicator.
|
||||
* 加入「方向燈取消控制」延遲控制設。(感謝 @wabes 建議)
|
||||
* Added delay config to "Disable Lat Control on Blinker". (Thanks to @wabes)
|
||||
* 加入巴西版 2020 Corolla Hybrid 指紋v2。(感謝 @berno22 提供)
|
||||
* Added Brazil 2020 Corolla Hybrid FPv2. (Thanks to @berno22)
|
||||
|
||||
dragonpilot 0.7.5.2
|
||||
========================
|
||||
* 加入對 VW MQB/PQ 的支援。(感謝 @dingliangxue 移植)
|
||||
* Added support to VW MQB/PQ platform. (Thanks to @dingliangxue)
|
||||
* 修改成 3 小時後停止供電。(感謝 @Wei 建議)
|
||||
* Updated to stop charging after 3 hrs. (Thanks to @Wei)
|
||||
* 移除行車記錄下的「碰撞偵測」功能。
|
||||
* Removed Impact Detection in Dashcam.
|
||||
* 修正開啟「Noctua 風扇」模式導致的錯誤。(感謝 @阿濤 回報)
|
||||
* Fixed a bug caused by enabling "Noctua Mod". (Thanks to @阿濤)
|
||||
* 修正「位智模式」無法顯示警示的問題。(感謝 @axandres 回報)
|
||||
* Fixed alert issue in waze mode. (Thanks to @axandres)
|
||||
* 修正無法顯示更新中圖示的問題。
|
||||
* Fixed unable to display "UPDATING" icon issue.
|
||||
* 加入「允許多次自動換道」功能。(感謝 @阿濤 建議)
|
||||
* Added "Allow Continuous Auto Lane Change" Toggle. (Thanks to @阿濤)
|
||||
* 修正開機後設定頁面有時會錯誤的問題。(感謝 @salmankhan、@Wei 回報)
|
||||
* Fixed setting page crash issue. (Thanks to @salmankhan, @Wei)
|
||||
* 修正熄火後一直出現更新訊息的錯誤。(感謝 @Sky Chang 回報)
|
||||
* Fixed issue that keep showing update prompt. (Thanks to @Sky Chang)
|
||||
|
||||
dragonpilot 0.7.5.1
|
||||
========================
|
||||
* 修正因同時使用「社群功能」和「自定車型」造成的加減速問題。(特別感謝 @Wei、@Sky Chang、@Han9365、@鄧育林 的測試以及回報。)
|
||||
* Fixed acceleration issue caused by used of both "Community Maintain Feature" and "Custom Car Model". (Special Thanks to @Wei, @Sky Chang, @Han9365, @鄧育林)
|
||||
* 新增 DragonMaxSpeedLimit 設定值 (mph),當如果車速高於此值 op 將會停止操控。(感謝 @Anthony 建議)
|
||||
* Added DragonMaxSpeedLimit parameter (mph), op will stop controlling when car speed is high than the value. (Thanks to @Anthony)
|
||||
* 更新 appd 使用 cnpmjs 來下載 APKs。
|
||||
* Updated appd to use cnpmjs to download APKs.
|
||||
* 修正更新服務。(感謝 @Wei)
|
||||
* Fixed Update Service. (Thanks to @Wei)
|
||||
* 新增加拿大版 2018 Toyota Sienna LTD 指紋(v2)。(感謝 明峰 提供)
|
||||
* Added Canada 2018 Toyota Sienna LTD fingerprint (v2). (Thanks to 明峰)
|
||||
* 新增「通過移動網路上傳」開關
|
||||
* Added Upload Over Mobile Network toggle.
|
||||
* 新增「通過熱點上傳」開關
|
||||
* Added Upload Over Hotspot toggle.
|
||||
* 新增加拿大版 2018 Toyota Sienna LTD 指紋(v1)。(感謝 明峰 提供)
|
||||
* Added Canada 2018 Toyota Sienna LTD fingerprint (v1). (Thanks to 明峰)
|
||||
* 新增大陸版 Volkswagen Golf GTI 指紋 (v1)。(感謝 easyeiji 提供)
|
||||
* Added China Volkswagen Golf GTI fingerprint (v1). (Thanks to easyeiji)
|
||||
|
||||
dragonpilot 0.7.5.0
|
||||
========================
|
||||
* 基於最新 openpilot 0.7.5 devel-staging.
|
||||
* Based on latest openpilot 0.7.5 devel-staging.
|
||||
* 更新 dp 圖示 (特別感謝 @wabes 的設計與提供)。
|
||||
* Updated dp logo, special thanks to @wabes for the design.
|
||||
* 簡/繁中文版和 i18n 整合成為單一版本。
|
||||
* Merged zhs/zht/i18n versions into one.
|
||||
* 新增大陸版 CAMRY HYBRID 指紋v2。(感謝 @杜子腾)
|
||||
* Added China Camery Hybrid FPv2. (Thanks to @杜子腾)
|
||||
* 新增台灣版 Altis HYBRID 指紋v1。(感謝 @Fish)
|
||||
* Added Taiwan Altis Hybrid FPv1. (Thanks to @Fish)
|
||||
* 新增行駛時關閉畫面功能。
|
||||
* Added Screen off while driving feature.
|
||||
* 新增倒車時關閉畫面功能。
|
||||
* Added Screen off while reversing feature.
|
||||
* 新增駕駛介面加入「加速模式」切換鈕。
|
||||
* Added acceleration profile toggle onto driving UI.
|
||||
* 新增自定車型功能,取代指紋暫存功能。
|
||||
* Replaced fingerprint cache with custom car model selector.
|
||||
* 新增可調亮度。
|
||||
* Added Brightness changer.
|
||||
* 新增部分德語支持。(特別感謝 @arne182 提供)
|
||||
* Added partial de_DE language support (Thanks to @arne182)
|
||||
* 新增停車碰撞偵測記錄功能。
|
||||
* Added off road impact detection to dashcam.
|
||||
|
||||
2020-05-06
|
||||
========================
|
||||
* 更新 dp 圖示 (特別感謝 @wabes 的設計與提供)。
|
||||
* 中文版整合進 i18n 版。
|
||||
* 刪除指紋暫存功能。
|
||||
* 新增 CAMERY HIBRID 指紋。(感謝 @杜子腾)
|
||||
* 新增行駛時關閉畫面功能。
|
||||
* 新增倒車時關閉畫面功能。
|
||||
* 新增駕駛介面加入「加速模式」切換鈕。
|
||||
* 新增自定義車型。
|
||||
|
||||
2020-04-16
|
||||
========================
|
||||
* [DEVEL] 加入台灣版 2016 Lexus IS200t 指紋。(感謝 Philip / Cody Dai)
|
||||
* [DEVEL] 加入台灣版 2016 Toyota Prius 4.5 代指紋。(感謝 Philip)
|
||||
* [DEVEL] 加入台灣版 201x Toyota RAV4 4WD 指紋。(感謝 Philip)
|
||||
* [DEVEL] 加入台灣版 2020 Toyota Auris w/ LTA 指紋。(感謝 Philip)
|
||||
* [DEVEL] 修正 commIssue 錯誤。(感謝 Kent 協助)
|
||||
|
||||
2020-04-13
|
||||
========================
|
||||
* [DEVEL] 加入可調整 Toyota Sng 起步反應值 (DragonToyotaSngResponse)。 (特別感謝 @Wei 提供 PR)
|
||||
* [DEVEL] 駕駛介面加入「動態調整車距」按鈕。(感謝 @cgw1968-5779 建議)
|
||||
* [DEVEL] 更新 update script。(感謝 深鯨希西 回報)
|
||||
|
||||
2020-04-10
|
||||
========================
|
||||
* [DEVEL] 更新 panda 至最新的 comma:master 分支。
|
||||
* [DEVEL] 移除所有的第三方應用改為自動下載。
|
||||
* [DEVEL] 移除「啟用原廠 DSU 模式」、「安全帶檢查」、「車門檢查」開關。
|
||||
|
||||
2020-03-31
|
||||
========================
|
||||
* [DEVEL] 更新至 2020-03-31 testing 分支。
|
||||
|
||||
2020-03-27
|
||||
========================
|
||||
* [DEVEL] 更新至最新的 testing 分支:
|
||||
* 加入波蘭版 2015 Lexus NX200T 支援。(感謝 wabes 提供)
|
||||
* 調整「啟用原廠 DSU 模式」為不再需要 AHB 。(Enable Stock DSU Mode no longer requires "AHB" toggle)
|
||||
* 加入「安全帶檢查」、「車門檢查」、「檔位檢查」、「溫度檢查」開關。
|
||||
* 加入曲率學習功能 - Curvature Learner 。(感謝 zorrobyte 提供)
|
||||
* 加入大陸版 2018 Toyota Highlander 支援。(感謝 toyboxZ 提供)
|
||||
* 加入大陸版 2018 Toyota Camry 2.0 支援。(感謝 Rming 提供)
|
||||
* 加入韓文支持。(感謝 crwusiz 提供)
|
||||
* 調整 OFFROAD 主頁翻譯將 "dragonpilot" 改回 "openpilot"。
|
||||
|
||||
2020-03-22
|
||||
========================
|
||||
* [DEVEL] 更新至最新的 testing 分支。
|
||||
|
||||
2020-03-17
|
||||
========================
|
||||
* [DEVEL] 更新至最新的 testing 分支 (commaai:devel-staging 0.7.4)。
|
||||
* [DEVEL] 加入動態調整車距功能。(特別感謝 @ShaneSmiskol 提供 PR)
|
||||
|
||||
2020-03-14
|
||||
========================
|
||||
* [DEVEL] 更新 pt-Br (葡萄牙語) 翻譯。(感謝 berno22 提供)
|
||||
* [DEVEL] 加入自動關機開關。(感謝 Rzxd 建議)
|
||||
* [DEVEL] 調高 Toyota 扭力容錯值。
|
||||
* [DEVEL] 優化讀取 dp 設定值。
|
||||
* [DEVEL] 加入 2019 手動 Civic 指紋。感謝 (AlexNoop 提供)
|
||||
* [DEVEL] dp 功能加入對 Subaru 車系的支援。
|
||||
|
||||
2020-03-06
|
||||
========================
|
||||
* [DEVEL] 加入葡萄牙語支持。(感謝 berno22 提供)
|
||||
* [DEVEL] 加入大陸 2018 Camry、2020 RAV4 指紋。(感謝 笨木匠 提供)
|
||||
* [DEVEL] 建立 devel-i18n 取代 devel-en。
|
||||
* [DEVEL] devel-en is deprecated, please switch to devel-i18n instead.
|
||||
|
||||
2020-03-04
|
||||
========================
|
||||
* [DEVEL] 加入顯示駕駛監控畫面。
|
||||
* [DEVEL] 加入加速模式選項。(特別感謝 @arne182, @cgw1968-5779 提供 PR)
|
||||
* [DEVEL] 修正 shutdownd 在 comma two 可能會不正常關機的錯誤。(感謝 @Wei, @Rzxd 回報)
|
||||
|
||||
2020-02-25
|
||||
========================
|
||||
* [DEVEL] 更新至最新的 commaai:devel (0.7.3)。
|
||||
|
||||
2020-02-21
|
||||
========================
|
||||
* [DEVEL] 更新至最新的 commaai:devel (0.7.3)。
|
||||
|
||||
2020-02-14
|
||||
========================
|
||||
* [DEVEL] 更新至最新的 commaai:devel (0.7.2)。
|
||||
* [DEVEL] 修正錯誤。
|
||||
|
||||
2020-02-08
|
||||
========================
|
||||
* [DEVEL] 更新至最新的 commaai:devel (0.7.2)。
|
||||
* [DEVEL] dp 功能加入對現代 (Hyundai) 車系的支援。
|
||||
* [DEVEL] 加入神盾測速照相自動啟動的開關。
|
||||
* [DEVEL] 更新高德地圖至 v4.5.0.600053。
|
||||
* [DEVEL] 使用 0.6.6 版的更新系統。
|
||||
* [DEVEL] 修正急剎問題。(感謝 kumar 提供)
|
||||
|
||||
2020-01-31
|
||||
========================
|
||||
* [DEVEL] 移除行車介面電量、溫度顯示,(修正畫面當機、黑屏問題)
|
||||
|
||||
2020-01-29
|
||||
========================
|
||||
* [DEVEL] 修正行車介面錯誤。(感謝 深鲸希西 測試;eisenheim、HeatNation 反應)
|
||||
|
||||
2020-01-23
|
||||
========================
|
||||
* [DEVEL] 加入 Steer Ratio Learner 關閉。(感謝 eisenheim 建議)
|
||||
* [DEVEL] 行車介面加入電量、溫度。(感謝 eisenheim 建議)
|
||||
* [DEVEL] 優化 appd。
|
||||
|
||||
2020-01-19
|
||||
========================
|
||||
* [DEVEL] 更新至最新的 commaai:devel (0.7.1)。
|
||||
* [DEVEL] 調整 appd 和 ALC 邏輯。
|
||||
|
||||
2020-01-14
|
||||
========================
|
||||
* [DEVEL] 加入開機啟動個人熱點。(感謝 eisenheim 建議)
|
||||
|
||||
2020-01-08
|
||||
========================
|
||||
* [DEVEL] 加入大陸版 2018 Lexus RX300 支援。(感謝 cafe 提供)
|
||||
* [DEVEL] 加入 DragonBTG 設定。(感謝 CloudJ、低調哥、歐姓Altis車主 提供)
|
||||
|
||||
2019-12-31
|
||||
========================
|
||||
* [DEVEL-ZHS] 加回第三方應用。
|
||||
|
||||
2019-12-29
|
||||
========================
|
||||
* [DEVEL] 更新至最新的 commaai:devel (0.7.0)。
|
||||
* [DEVEL] 輔助/自動變道改為可調整參數 (進階用戶)。(DragonAssistedLCMinMPH、DragonAutoLCMinMPH、DragonAutoLCDelay)
|
||||
* [DEVEL-ZHS] 修正無法運行第三方應用錯誤。(感謝 深鲸希西 反應)
|
||||
|
||||
2019-12-18
|
||||
========================
|
||||
* [DEVEL] 修正自動換道邏輯。
|
||||
* [DEVEL] 更新 offroad 翻譯。
|
||||
* [DEVEL] 錯誤修正。
|
||||
* [DEVEL] 移除美版 2017 Civic Hatchback 指紋。(與其它車型衝突)
|
||||
|
||||
2019-12-17
|
||||
========================
|
||||
* [DEVEL] 更新至最新的 commaai:devel (0.7.0)。
|
||||
* [DEVEL] 加入輔助換道開關。(24mph / 40kph 以上)
|
||||
* [DEVEL] 加入自動換道開關。(40mph / 65kph 以上)
|
||||
* [DEVEL] 加入大陸版 2019 雷凌汽油版指紋。 (感謝 Shell 提供)
|
||||
* [DEVEL] 加入大陸版 2019 卡羅拉汽油版指紋。 (感謝 Shell 提供)
|
||||
* [DEVEL] 加入美版 2017 Civic Hatchback 指紋。(感謝 CFranHonda 提供)
|
||||
|
||||
2019-12-10
|
||||
========================
|
||||
* [DEVEL] 加入位智車機模式。 (Waze Mode)
|
||||
|
||||
2019-11-21
|
||||
========================
|
||||
* [DEVEL] 修正 offroad 翻譯。(感謝 鄧育林 回報)
|
||||
* [DEVEL] 調整前車靜止移動偵測參數。
|
||||
* [DEVEL] 前車靜止移動偵測可在未啟用 dp 時運作。
|
||||
|
||||
2019-11-18
|
||||
========================
|
||||
* [DEVEL] 修正 offroad 翻譯。(感謝 Cody、鄧育林 回報)
|
||||
|
||||
2019-11-18
|
||||
========================
|
||||
* [DEVEL] 修正 frame 翻譯。
|
||||
|
||||
2019-11-15
|
||||
========================
|
||||
* [DEVEL] 修正不會充電的錯誤。 (感謝 袁昊 反應)
|
||||
|
||||
2019-11-15
|
||||
========================
|
||||
* [DEVEL] 修正充電控制。 (感謝 KT 反應)
|
||||
* [DEVEL] 更新 frame 翻譯,改為多語言版。 (感謝 深鲸希西、shaoching885、鄧育林 反應)
|
||||
* [DEVEL] 更新至最新的 commaai:devel (0.6.6)。
|
||||
|
||||
2019-11-12
|
||||
========================
|
||||
* [DEVEL] 只顯示電量文字 (注意:有時不會更新,需要拔插 USB 線)
|
||||
* [DEVEL] 自動偵測並鎖定硬體 (EON / UNO)。
|
||||
|
||||
2019-11-12
|
||||
========================
|
||||
* [DEVEL] 加入鎖定硬體 (EON / UNO) 的程式碼。
|
||||
|
||||
2019-11-11
|
||||
========================
|
||||
* [DEVEL] 更新高德地圖至 v4.3.0.600310 R2098NSLAE
|
||||
* [DEVEL] 更新 MiXplorer 至 v6.40.3
|
||||
* [DEVEL] 更新至最新的 commaai:devel (0.6.6)。
|
||||
* [DEVEL] 前車靜止移動偵測加入偵測警示。
|
||||
|
||||
2019-11-07
|
||||
========================
|
||||
* [DEVEL] 讓 Bosch 系統顯示三角。 (感謝 ching885 回報)
|
||||
* [DEVEL] 更新 offroad 多語言版簡體中文翻譯 (感謝 Rming 提供)
|
||||
|
||||
2019-11-06
|
||||
========================
|
||||
* [DEVEL] 修正 0.6.6 appd 和 dashcamd 錯誤。 (感謝 鄧育林 回報)
|
||||
* [DEVEL] 更新至最新的 commaai:devel (0.6.6)。
|
||||
|
||||
2019-11-05
|
||||
========================
|
||||
* [DEVEL] 加入台灣 Lexus 2017 GS450h 支援。 (感謝 簡銘佑 提供指紋)
|
||||
|
||||
2019-11-01
|
||||
========================
|
||||
* [DEVEL] 新增神盾測速照相。 (感謝 Sky Chang 和 Wei Yi Chen)
|
||||
* [DEVEL] 修正 offroad 翻譯。 (感謝 Leo Hsieh)
|
||||
|
||||
2019-11-01
|
||||
========================
|
||||
* [DEVEL] 移除 Miui 字型,縮小 dp 使用空間。
|
||||
* [DEVEL] 更新 offroad 為多語言版
|
||||
* [DEVEL] 更新至最新的 commaai:devel (0.6.5)。
|
||||
|
||||
2019-10-29
|
||||
========================
|
||||
* [DEVEL] 加入 SnG 補丁。(感謝 楊雅智)
|
||||
|
||||
2019-10-28
|
||||
========================
|
||||
* [DEVEL] 更新至最新的 commaai:devel (0.6.5)。
|
||||
* [DEVEL] 調整 dragon_allow_gas 邏輯 (請回報任何問題,需更新 Panda 韌體)
|
||||
|
||||
2019-10-18
|
||||
========================
|
||||
* [DEVEL] 加入前車靜止移動偵測。(測試版,感謝 ucolchen)
|
||||
* [DEVEL] 移除強迫網路連線提示。(感謝 Shell)
|
||||
* [DEVEL] 修正 allow_gas 功能。
|
||||
|
||||
2019-10-18
|
||||
========================
|
||||
* [DEVEL] 加入彎道減速功能開關。
|
||||
* [DEVEL] 強迫使用 dp 版 Panda 韌體。
|
||||
* [DEVEL] 更新至最新的 commaai:devel (0.6.5)。
|
||||
|
||||
2019-10-17
|
||||
========================
|
||||
* [DEVEL] 加入「車型」顯示於 dp 設定畫面。
|
||||
* [DEVEL] 修正充電控制讀取預設值的錯誤。
|
||||
* [DEVEL] 修正無法顯示更新記錄的錯誤。
|
||||
|
||||
2019-10-16
|
||||
========================
|
||||
* [DEVEL] 刷新 Panda 韌體按鈕將會自動重啟 EON。(感謝 鄧育林 建議)
|
||||
* [DEVEL] 下載更新記錄時使用 "no-cache" 標頭。
|
||||
* [DEVEL] 更新高德地圖至 v4.3.0
|
||||
* [DEVEL] 刪除 bs (Branch Switcher)
|
||||
|
||||
2019-10-14
|
||||
========================
|
||||
* [DEVEL] 啟用自動更新功能。(感謝 鄧育林 提供)
|
||||
* [DEVEL] 清除不再使用的 dp params。
|
||||
* [DEVEL] 加入數字電量指示。(感謝 鄧育林 建議)
|
||||
* [DEVEL] 加入刷新 Panda 韌體按鈕。
|
||||
|
||||
2019-10-11
|
||||
========================
|
||||
* [DEVEL] 更新至最新的 commaai:devel (0.6.5)。
|
||||
* [DEVEL] 加入台灣 2019 RAV4 汽油版指紋。 (感謝 Max Duan / CloudJ 提供)
|
||||
|
||||
2019-10-09
|
||||
========================
|
||||
* [DEVEL] 加入當 LatCtrl 關閉時,畫面顯示提示訊息。
|
||||
|
||||
2019-10-08
|
||||
========================
|
||||
* [DEVEL] 加回駕駛監控開關。
|
||||
* [DEVEL] 加入 bs (branch switcher) 程式。
|
||||
|
||||
2019-10-07
|
||||
========================
|
||||
* [DEVEL] 加入台灣版 2019 RAV4H 油電版指紋。(感謝 Max Duan 提供)
|
||||
|
||||
2019-10-05
|
||||
========================
|
||||
* [DEVEL] 移除 curvature learner: 轉角明顯比原廠小。
|
||||
* [DEVEL] 更新至最新的 commaai:devel (0.6.4)。
|
||||
|
||||
2019-09-30
|
||||
========================
|
||||
* [DEVEL] 更新 curvature learner 版本至 v4。
|
||||
* [DEVEL] Lexus ISH 使用更精確的 EPS Steering Angle Sensor
|
||||
|
||||
2019-09-27
|
||||
========================
|
||||
* [DEVEL] 加入 Zorrobyte 的 curvature learner (https://github.com/zorrobyte/openpilot)
|
||||
* [DEVEL] 加入可開關駕駛監控的程式碼。
|
||||
* [DEVEL] 取消當 steering 出現錯誤時,自動切斷方向控制 2 秒的機制。
|
||||
* [DEVEL] 讓行車介面的「方向盤」/「轉彎」圖示半透明化。
|
||||
|
||||
2019-09-26
|
||||
========================
|
||||
* [DEVEL] 修正當「啟用記錄服務」關閉時,make 會有問題的錯誤。 (感謝 shaoching885 和 afa 回報)
|
||||
|
||||
2019-09-24
|
||||
========================
|
||||
* [DEVEL] 行車介面加入可開關的「前車」、「路線」、「車道」設定。
|
||||
* [DEVEL] 行車介面加入可開關的「方向燈號」提示。 (感謝 CloudJ 建議,程式碼來源: https://github.com/kegman/openpilot)
|
||||
|
||||
2019-09-23
|
||||
========================
|
||||
* [DEVEL] 優化讀取 params 的次數。
|
||||
* [DEVEL] 加入可開關的車道偏移警示。
|
||||
* [DEVEL] 修正充電控制邏輯。
|
||||
* [DEVEL] 加入台灣 Prius 4.5 指紋。 (感謝 Lin Hsin Hung 提供)
|
||||
|
||||
2019-09-20
|
||||
========================
|
||||
* [DEVEL] 加入充電控制功能。 (感謝 loveloveses 和 KT 建議)
|
||||
|
||||
2019-09-16
|
||||
========================
|
||||
* [DEVEL] 加入台灣 CT200h 指紋。 (感謝 CloudJ 提供)
|
||||
* [DEVEL] 加入美版 CT200h 移植。 (感謝 thomaspich 提供)
|
||||
|
||||
2019-09-13
|
||||
========================
|
||||
* [DEVEL] 行車介面加入可開關的「速度顯示」設定。
|
||||
|
||||
2019-09-09
|
||||
========================
|
||||
* [DEVEL] 加入 GreyPanda 模式。
|
||||
|
||||
2019-08-28
|
||||
========================
|
||||
* [DEVEL] 加入可調警示音量。
|
||||
|
||||
2019-08-27
|
||||
========================
|
||||
* [DEVEL] 自動關機改為可調時長。
|
||||
35
CONTRIBUTORS.md
Normal file
@@ -0,0 +1,35 @@
|
||||
# CONTRIBUTORS
|
||||
|
||||
Due to the way we manage the source code, it is not possible to see all the contributors' info, hence we create a list here.
|
||||
If you have contributed to DP project before and your name is not listed here, feel free to send us a PR to update this!
|
||||
|
||||
### TEAM
|
||||
Name | github | Role
|
||||
------------------------------------------------------------ | ------------------------------------------------------------ | ------------------------------------------------------------
|
||||
cafe | [cafe](https://github.com/coffice12) | Resource Provider
|
||||
kumar | [rav4kumar](https://github.com/rav4kumar) | Release Maintainer
|
||||
loveloveses | [loveloveses](https://github.com/loveloveses) | Wiki Maintainer
|
||||
Rick Lan | [efinilan](https://github.com/efinilan) | Release Maintainer
|
||||
|
||||
### CONTRIBUTORS
|
||||
Name | github
|
||||
------------------------------------------------------------ | ------------------------------------------------------------
|
||||
andy741217 | [andy741217](https://github.com/andy741217)
|
||||
Arne Schwarck | [arne182](https://github.com/arne182)
|
||||
berno22 | [berno22](https://github.com/berno22)
|
||||
Bobbydough | [Bobbydough](https://github.com/bobbydough)
|
||||
cgw1968 | [cgw1968](https://github.com/cgw1968-5779)
|
||||
Curtis Jenkins | [actuallylemoncurd](https://github.com/actuallylemoncurd)
|
||||
DFyffe | [donfyffe](https://github.com/donfyffe)
|
||||
dinglx | [dingliangxue](https://github.com/dingliangxue)
|
||||
eyezenheim | [eyezenheim](https://github.com/eyezenheim)
|
||||
kegman | [kegman](https://github.com/kegman)
|
||||
lijunhao731 | [lijunhao731](https://github.com/lijunhao731)
|
||||
lirudy | [lirudy](https://github.com/lirudy)
|
||||
LOVEChen | [LOVEChen](https://github.com/LOVEChen)
|
||||
menwenliang | [menwenliang](https://github.com/menwenliang)
|
||||
Nelson Chen | [nelsonjchen](https://github.com/nelsonjchen)
|
||||
rming | [Rming](https://github.com/rming)
|
||||
sebastian4k | [sebastian4k](https://github.com/sebastian4k)
|
||||
Shane Smiskol | [sshane](https://github.com/sshane)
|
||||
toyboxZ | [toyboxZ](https://github.com/toyboxZ)
|
||||
25
HOWTO-ONEPLUS.md
Normal file
@@ -0,0 +1,25 @@
|
||||
How to install on Oneplus 3t?
|
||||
------
|
||||
1. clone dragonpilot to /data/ and make sure it's named openpilot:
|
||||
(手動安裝切換至 dp)
|
||||
```
|
||||
cd /data/ && rm -fr openpilot ; git clone https://github.com/dragonpilot-community/dragonpilot.git openpilot -b 0.8.7
|
||||
```
|
||||
|
||||
2. run command:
|
||||
(在 ssh 畫面下,輸入)
|
||||
```
|
||||
cd /data/openpilot/scripts/ && ./oneplus_update_neos.sh
|
||||
```
|
||||
|
||||
3. Let it download and complete it update, after a couple of reboot, your screen will then stay in fastboot mode.
|
||||
(等待下載並讓它重新開機,沒錯誤的話會進入 Android 機器人更新畫面,等自動重新開機)
|
||||
|
||||
4. In fastboot mode, select use volume button to select to `Recovery mode` then press power button.
|
||||
(在 fastboot 模式,用音量鍵上下選到 Recovery mode 再按下電源鍵)
|
||||
|
||||
5. In Recovery mode, tap `apply update` -> `Choose from emulated` -> `0/` -> `update.zip` -> `Reboot system now`
|
||||
(在 Recovery mode,點選 `apply update` -> `Choose from emulated` -> `0/` -> `update.zip` -> `Reboot system now`)
|
||||
|
||||
6. You should be able to boot into openpilot, if touch screen is not working, try to reboot again.
|
||||
(你現在應該可以進入 openpilot 畫面,如果點擊畫面沒有反應,請再重新開機一次)
|
||||
10
JETSON.md
Normal file
@@ -0,0 +1,10 @@
|
||||
set_core_affinity
|
||||
------
|
||||
Jetson Xavier NX has 6 cores running at 1.9 GHz, here is what I've defined
|
||||
|
||||
0 = (not specified)
|
||||
1 = plannerd / radard
|
||||
2 = boardd
|
||||
3 = controlsd
|
||||
4 = camerad
|
||||
5 = modeld
|
||||
27
Jenkinsfile
vendored
@@ -71,7 +71,24 @@ pipeline {
|
||||
}
|
||||
steps {
|
||||
phone_steps("eon-build", [
|
||||
["build release2-staging and dashcam-staging", "cd release && PUSH=1 ./build_release2.sh"],
|
||||
["build release2-staging & dashcam-staging", "cd release && PUSH=1 ./build_release2.sh"],
|
||||
])
|
||||
}
|
||||
}
|
||||
|
||||
stage('Build release3') {
|
||||
agent {
|
||||
docker {
|
||||
image 'python:3.7.3'
|
||||
args '--user=root'
|
||||
}
|
||||
}
|
||||
when {
|
||||
branch 'devel-staging'
|
||||
}
|
||||
steps {
|
||||
phone_steps("tici", [
|
||||
["build release3-staging & dashcam3-staging", "PUSH=1 $SOURCE_DIR/release/build_release3.sh"],
|
||||
])
|
||||
}
|
||||
}
|
||||
@@ -80,7 +97,10 @@ pipeline {
|
||||
when {
|
||||
not {
|
||||
anyOf {
|
||||
branch 'master-ci'; branch 'devel'; branch 'devel-staging'; branch 'release2'; branch 'release2-staging'; branch 'dashcam'; branch 'dashcam-staging'; branch 'testing-closet*'; branch 'hotfix-*'
|
||||
branch 'master-ci'; branch 'devel'; branch 'devel-staging';
|
||||
branch 'release2'; branch 'release2-staging'; branch 'dashcam'; branch 'dashcam-staging';
|
||||
branch 'release3'; branch 'release3-staging'; branch 'dashcam3'; branch 'dashcam3-staging';
|
||||
branch 'testing-closet*'; branch 'hotfix-*'
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -152,7 +172,7 @@ pipeline {
|
||||
phone_steps("eon", [
|
||||
["build", "cd selfdrive/manager && ./build.py"],
|
||||
["test athena", "nosetests -s selfdrive/athena/tests/test_athenad_old.py"],
|
||||
["test sounds", "nosetests -s selfdrive/test/test_sounds.py"],
|
||||
["test sounds", "nosetests -s selfdrive/ui/tests/test_sounds.py"],
|
||||
["test boardd loopback", "nosetests -s selfdrive/boardd/tests/test_boardd_loopback.py"],
|
||||
["test loggerd", "python selfdrive/loggerd/tests/test_loggerd.py"],
|
||||
["test encoder", "python selfdrive/loggerd/tests/test_encoder.py"],
|
||||
@@ -191,7 +211,6 @@ pipeline {
|
||||
phone_steps("tici", [
|
||||
["build", "cd selfdrive/manager && ./build.py"],
|
||||
["onroad tests", "cd selfdrive/test/ && ./test_onroad.py"],
|
||||
//["build release3-staging", "cd release && PUSH=${env.R3_PUSH} ./build_release3.sh"],
|
||||
])
|
||||
}
|
||||
}
|
||||
|
||||
11
README.md
@@ -1,4 +1,4 @@
|
||||
[](#)
|
||||

|
||||
|
||||
Table of Contents
|
||||
=======================
|
||||
@@ -57,7 +57,7 @@ openpilot should preserve all other vehicle's stock features, including, but are
|
||||
Supported Hardware
|
||||
------
|
||||
|
||||
At the moment, openpilot supports the EON Gold DevKit and the [comma two](https://comma.ai/shop/products/comma-two-devkit). A [car harness](https://comma.ai/shop/products/car-harness) is recommended to connect the EON or comma two to the car. For experimental purposes, openpilot can also run on an Ubuntu computer with external [webcams](https://github.com/commaai/openpilot/tree/master/tools/webcam).
|
||||
At the moment, openpilot supports the EON Gold DevKit, [comma two](https://comma.ai/shop/products/two), and [comma three](https://comma.ai/shop/products/three). A [car harness](https://comma.ai/shop/products/car-harness) is recommended to connect your device to the car. For experimental purposes, openpilot can also run on an Ubuntu computer with external [webcams](https://github.com/commaai/openpilot/tree/master/tools/webcam).
|
||||
|
||||
Supported Cars
|
||||
------
|
||||
@@ -204,6 +204,7 @@ Community Maintained Cars and Features
|
||||
| Volkswagen| Jetta 2018-20 | Driver Assistance | Stock | 0mph | 0mph |
|
||||
| Volkswagen| Jetta GLI 2021 | Driver Assistance | Stock | 0mph | 0mph |
|
||||
| Volkswagen| Passat 2016-17<sup>2</sup> | Driver Assistance | Stock | 0mph | 0mph |
|
||||
| Volkswagen| T-Cross 2021 | Driver Assistance | Stock | 0mph | 0mph |
|
||||
| Volkswagen| Tiguan 2020 | Driver Assistance | Stock | 0mph | 0mph |
|
||||
| Volkswagen| Touran 2017 | Driver Assistance | Stock | 0mph | 0mph |
|
||||
|
||||
@@ -219,7 +220,7 @@ Although they're not upstream, the community has openpilot running on other make
|
||||
Installation Instructions
|
||||
------
|
||||
|
||||
Install openpilot on an EON Gold or comma two by entering ``https://openpilot.comma.ai`` during the installer setup.
|
||||
Install openpilot on a supported device by entering ``https://openpilot.comma.ai`` during the installer setup.
|
||||
|
||||
Follow these [video instructions](https://youtu.be/lcjqxCymins) to properly mount the device on the windshield. Note: openpilot features an automatic pose calibration routine and openpilot performance should not be affected by small pitch and yaw misalignments caused by imprecise device mounting.
|
||||
|
||||
@@ -298,13 +299,13 @@ openpilot is open source software: the user is free to disable data collection i
|
||||
openpilot logs the road facing camera, CAN, GPS, IMU, magnetometer, thermal sensors, crashes, and operating system logs.
|
||||
The driver facing camera is only logged if you explicitly opt-in in settings. The microphone is not recorded.
|
||||
|
||||
By using openpilot, you agree to [our Privacy Policy](https://my.comma.ai/privacy). You understand that use of this software or its related services will generate certain types of user data, which may be logged and stored at the sole discretion of comma. By accepting this agreement, you grant an irrevocable, perpetual, worldwide right to comma for the use of this data.
|
||||
By using openpilot, you agree to [our Privacy Policy](https://connect.comma.ai/privacy). You understand that use of this software or its related services will generate certain types of user data, which may be logged and stored at the sole discretion of comma. By accepting this agreement, you grant an irrevocable, perpetual, worldwide right to comma for the use of this data.
|
||||
|
||||
Safety and Testing
|
||||
----
|
||||
|
||||
* openpilot observes ISO26262 guidelines, see [SAFETY.md](SAFETY.md) for more details.
|
||||
* openpilot has software in the loop [tests](.github/workflows/test.yaml) that run on every commit.
|
||||
* openpilot has software in the loop [tests](.github/workflows/selfdrive_tests.yaml) that run on every commit.
|
||||
* The safety model code lives in panda and is written in C, see [code rigor](https://github.com/commaai/panda#code-rigor) for more details.
|
||||
* panda has software in the loop [safety tests](https://github.com/commaai/panda/tree/master/tests/safety).
|
||||
* Internally, we have a hardware in the loop Jenkins test suite that builds and unit tests the various processes.
|
||||
|
||||
@@ -1,3 +1,9 @@
|
||||
Version 0.8.7 (2021-07-31)
|
||||
========================
|
||||
* comma three support!
|
||||
* Navigation alpha for the comma three!
|
||||
* Volkswagen T-Cross 2021 support thanks to jyoung8607!
|
||||
|
||||
Version 0.8.6 (2021-07-21)
|
||||
========================
|
||||
* Revamp lateral and longitudinal planners
|
||||
|
||||
29
SConstruct
@@ -7,6 +7,8 @@ import platform
|
||||
import numpy as np
|
||||
|
||||
TICI = os.path.isfile('/TICI')
|
||||
JETSON = os.path.isfile('/JETSON')
|
||||
|
||||
Decider('MD5-timestamp')
|
||||
|
||||
AddOption('--test',
|
||||
@@ -65,6 +67,10 @@ if arch == "aarch64" and TICI:
|
||||
|
||||
USE_WEBCAM = os.getenv("USE_WEBCAM") is not None
|
||||
|
||||
USE_MIPI = os.getenv("USE_MIPI") is not None
|
||||
if arch == "aarch64" and JETSON:
|
||||
arch = "jarch64"
|
||||
|
||||
lenv = {
|
||||
"PATH": os.environ['PATH'],
|
||||
}
|
||||
@@ -114,8 +120,19 @@ else:
|
||||
cflags = []
|
||||
cxxflags = []
|
||||
cpppath = []
|
||||
rpath = []
|
||||
|
||||
if arch == "Darwin":
|
||||
if arch == "jarch64":
|
||||
libpath = [
|
||||
"#phonelibs/libyuv/larch64/lib",
|
||||
"#selfdrive/common",
|
||||
"/usr/lib",
|
||||
"/usr/local/lib",
|
||||
]
|
||||
cflags = ["-DXNX", "-march=armv8.2-a"]
|
||||
cxxflags = ["-DXNX", "-march=armv8.2-a"]
|
||||
rpath += ["/usr/local/lib"]
|
||||
elif arch == "Darwin":
|
||||
yuv_dir = "mac" if real_arch != "arm64" else "mac_arm64"
|
||||
libpath = [
|
||||
f"#phonelibs/libyuv/{yuv_dir}/lib",
|
||||
@@ -143,8 +160,9 @@ else:
|
||||
"/usr/local/lib",
|
||||
]
|
||||
|
||||
rpath = [
|
||||
"phonelibs/snpe/x86_64-linux-clang",
|
||||
if arch != "jarch64":
|
||||
rpath += ["phonelibs/snpe/x86_64-linux-clang"]
|
||||
rpath += [
|
||||
"cereal",
|
||||
"selfdrive/common"
|
||||
]
|
||||
@@ -309,7 +327,7 @@ else:
|
||||
qt_dirs += [f"/usr/include/{real_arch}-linux-gnu/qt5/Qt{m}" for m in qt_modules]
|
||||
|
||||
qt_libs = [f"Qt5{m}" for m in qt_modules]
|
||||
if arch == "larch64":
|
||||
if arch == "larch64" or arch == "jarch64":
|
||||
qt_libs += ["GLESv2", "wayland-client"]
|
||||
elif arch != "Darwin":
|
||||
qt_libs += ["GL"]
|
||||
@@ -342,7 +360,8 @@ if GetOption("clazy"):
|
||||
qt_env['ENV']['CLAZY_IGNORE_DIRS'] = qt_dirs[0]
|
||||
qt_env['ENV']['CLAZY_CHECKS'] = ','.join(checks)
|
||||
|
||||
Export('env', 'qt_env', 'arch', 'real_arch', 'SHARED', 'USE_WEBCAM')
|
||||
zmq = 'zmq'
|
||||
Export('env', 'qt_env', 'arch', 'real_arch', 'SHARED', 'USE_WEBCAM', 'zmq', 'USE_MIPI')
|
||||
|
||||
# cereal and messaging are shared with the system
|
||||
SConscript(['cereal/SConscript'])
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
Import('env', 'envCython', 'arch')
|
||||
Import('env', 'envCython', 'arch', 'zmq')
|
||||
|
||||
import shutil
|
||||
|
||||
@@ -8,7 +8,7 @@ messaging_dir = Dir('messaging')
|
||||
|
||||
# Build cereal
|
||||
|
||||
schema_files = ['log.capnp', 'car.capnp', 'legacy.capnp']
|
||||
schema_files = ['log.capnp', 'car.capnp', 'legacy.capnp', 'dp.capnp']
|
||||
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([f'gen/cpp/{s}.c++' for s in schema_files] + [f'gen/cpp/{s}.h' for s in schema_files],
|
||||
schema_files,
|
||||
@@ -40,6 +40,13 @@ messaging_objects = env.SharedObject([
|
||||
messaging_lib = env.Library('messaging', messaging_objects)
|
||||
Depends('messaging/impl_zmq.cc', services_h)
|
||||
|
||||
# note, this rebuilds the deps shared, zmq is statically linked to make APK happy
|
||||
# TODO: get APK to load system zmq to remove the static link
|
||||
if arch == "aarch64":
|
||||
zmq_static = FindFile("libzmq.a", "/usr/lib")
|
||||
shared_lib_shared_lib = [zmq_static, 'm', 'stdc++', "gnustl_shared", "kj", "capnp"]
|
||||
env.SharedLibrary('messaging_shared', messaging_objects, LIBS=shared_lib_shared_lib)
|
||||
|
||||
env.Program('messaging/bridge', ['messaging/bridge.cc'], LIBS=[messaging_lib, 'zmq'])
|
||||
Depends('messaging/bridge.cc', services_h)
|
||||
|
||||
|
||||
73
cereal/_SConstruct
Normal file
@@ -0,0 +1,73 @@
|
||||
import os
|
||||
import platform
|
||||
import subprocess
|
||||
import sysconfig
|
||||
|
||||
arch = subprocess.check_output(["uname", "-m"], encoding='utf8').rstrip()
|
||||
if platform.system() == "Darwin":
|
||||
arch = "Darwin"
|
||||
|
||||
cereal_dir = Dir('.')
|
||||
messaging_dir = Dir('./messaging')
|
||||
|
||||
cpppath = [
|
||||
cereal_dir,
|
||||
messaging_dir,
|
||||
'/usr/lib/include',
|
||||
'/opt/homebrew/include',
|
||||
sysconfig.get_paths()['include'],
|
||||
]
|
||||
|
||||
libpath = [
|
||||
'/opt/homebrew/lib',
|
||||
]
|
||||
|
||||
AddOption('--test',
|
||||
action='store_true',
|
||||
help='build test files')
|
||||
|
||||
AddOption('--asan',
|
||||
action='store_true',
|
||||
help='turn on ASAN')
|
||||
|
||||
ccflags_asan = ["-fsanitize=address", "-fno-omit-frame-pointer"] if GetOption('asan') else []
|
||||
ldflags_asan = ["-fsanitize=address"] if GetOption('asan') else []
|
||||
|
||||
env = Environment(
|
||||
ENV=os.environ,
|
||||
CC='clang',
|
||||
CXX='clang++',
|
||||
CCFLAGS=[
|
||||
"-g",
|
||||
"-fPIC",
|
||||
"-O2",
|
||||
"-Wunused",
|
||||
"-Werror",
|
||||
] + ccflags_asan,
|
||||
LDFLAGS=ldflags_asan,
|
||||
LINKFLAGS=ldflags_asan,
|
||||
|
||||
CFLAGS="-std=gnu11",
|
||||
CXXFLAGS="-std=c++1z",
|
||||
CPPPATH=cpppath,
|
||||
LIBPATH=libpath,
|
||||
CYTHONCFILESUFFIX=".cpp",
|
||||
tools=["default", "cython"]
|
||||
)
|
||||
|
||||
Export('env', 'arch')
|
||||
|
||||
envCython = env.Clone(LIBS=[])
|
||||
envCython["CCFLAGS"] += ["-Wno-#warnings", "-Wno-deprecated-declarations"]
|
||||
if arch == "Darwin":
|
||||
envCython["LINKFLAGS"] = ["-bundle", "-undefined", "dynamic_lookup"]
|
||||
elif arch == "aarch64":
|
||||
envCython["LINKFLAGS"] = ["-shared"]
|
||||
envCython["LIBS"] = [os.path.basename(sysconfig.get_paths()['include'])]
|
||||
else:
|
||||
envCython["LINKFLAGS"] = ["-pthread", "-shared"]
|
||||
|
||||
Export('envCython')
|
||||
|
||||
|
||||
SConscript(['SConscript'])
|
||||
@@ -129,6 +129,19 @@ struct CarEvent @0x9b1657f34caf3ad3 {
|
||||
neosUpdateRequiredDEPRECATED @88;
|
||||
modelLagWarningDEPRECATED @93;
|
||||
startupOneplusDEPRECATED @82;
|
||||
|
||||
#dp
|
||||
preLaneChangeLeftALC @105;
|
||||
preLaneChangeRightALC @106;
|
||||
manualSteeringRequired @107;
|
||||
manualSteeringRequiredBlinkersOn @108;
|
||||
leadCarMoving @109;
|
||||
|
||||
# timebomb assist
|
||||
timebombWarn @110;
|
||||
timebombBypassing @111;
|
||||
timebombBypassed @112;
|
||||
mapdAlert @113;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -194,6 +207,11 @@ struct CarState {
|
||||
leftBlindspot @33 :Bool; # Is there something blocking the left lane change
|
||||
rightBlindspot @34 :Bool; # Is there something blocking the right lane change
|
||||
|
||||
# dp
|
||||
lkMode @37 :Bool;
|
||||
stopSteering @38 :Bool; # timebomb - stopSteering
|
||||
engineRPM @39 :Float32;
|
||||
|
||||
struct WheelSpeeds {
|
||||
# optional wheel speeds
|
||||
fl @0 :Float32;
|
||||
@@ -246,7 +264,7 @@ struct CarState {
|
||||
}
|
||||
|
||||
errorsDEPRECATED @0 :List(CarEvent.EventName);
|
||||
brakeLightsDEPRECATED @19 :Bool;
|
||||
brakeLights @19 :Bool;
|
||||
}
|
||||
|
||||
# ******* radar state @ 20hz *******
|
||||
|
||||
61
cereal/dp.capnp
Normal file
@@ -0,0 +1,61 @@
|
||||
using Cxx = import "./include/c++.capnp";
|
||||
$Cxx.namespace("cereal");
|
||||
|
||||
using Java = import "./include/java.capnp";
|
||||
$Java.package("ai.comma.openpilot.cereal");
|
||||
$Java.outerClassname("dp");
|
||||
|
||||
@0xbfa7e645486440c7;
|
||||
|
||||
# dp.capnp: a home for deprecated structs
|
||||
|
||||
# dp
|
||||
struct DragonConf {
|
||||
dpThermalStarted @0 :Bool;
|
||||
dpThermalOverheat @1 :Bool;
|
||||
dpAtl @2 :Bool;
|
||||
dpDashcamd @3 :Bool;
|
||||
dpAutoShutdown @4 :Bool;
|
||||
dpAthenad @5 :Bool;
|
||||
dpUploader @6 :Bool;
|
||||
dpLateralMode @7 :UInt8;
|
||||
dpSignalOffDelay @8 :Float32;
|
||||
dpLcMinMph @9 :UInt8;
|
||||
dpLcAutoCont @10 :Bool;
|
||||
dpLcAutoMinMph @11 :UInt8;
|
||||
dpLcAutoDelay @12 :Float32;
|
||||
dpAllowGas @13 :Bool;
|
||||
dpFollowingProfileCtrl @14 :Bool;
|
||||
dpFollowingProfile @15 :UInt8;
|
||||
dpAccelProfileCtrl @16 :Bool;
|
||||
dpAccelProfile @17 :UInt8;
|
||||
dpGearCheck @18 :Bool;
|
||||
dpSpeedCheck @19 :Bool;
|
||||
dpUiDisplayMode @20 :UInt8;
|
||||
dpUiSpeed @21 :Bool;
|
||||
dpUiEvent @22 :Bool;
|
||||
dpUiMaxSpeed @23 :Bool;
|
||||
dpUiFace @24 :Bool;
|
||||
dpUiLane @25 :Bool;
|
||||
dpUiLead @26 :Bool;
|
||||
dpUiDev @27 :Bool;
|
||||
dpUiDevMini @28 :Bool;
|
||||
dpUiBlinker @29 :Bool;
|
||||
dpUiBrightness @30 :UInt8;
|
||||
dpUiVolume @31 :Int8;
|
||||
dpToyotaLdw @32 :Bool;
|
||||
dpToyotaSng @33 :Bool;
|
||||
dpToyotaCruiseOverride @34 :Bool;
|
||||
dpToyotaCruiseOverrideVego @35 :Bool;
|
||||
dpToyotaCruiseOverrideAt @36 :Float32;
|
||||
dpToyotaCruiseOverrideSpeed @37 :Float32;
|
||||
dpVwTimebombAssist @38 :Bool;
|
||||
dpIpAddr @39 :Text;
|
||||
dpCameraOffset @40 :Int8;
|
||||
dpPathOffset @41 :Int8;
|
||||
dpLocale @42 :Text;
|
||||
dpSrLearner @43 :Bool;
|
||||
dpSrCustom @44 :Float32;
|
||||
dpAppd @45 :Bool;
|
||||
dpMapd @46 :Bool;
|
||||
}
|
||||
@@ -7,6 +7,7 @@ $Java.outerClassname("Log");
|
||||
|
||||
using Car = import "car.capnp";
|
||||
using Legacy = import "legacy.capnp";
|
||||
using Dp = import "dp.capnp";
|
||||
|
||||
@0xf3b1f17e25a4285b;
|
||||
|
||||
@@ -49,6 +50,7 @@ struct InitData {
|
||||
chffrIos @3;
|
||||
tici @4;
|
||||
pc @5;
|
||||
jetson @6;
|
||||
}
|
||||
|
||||
struct PandaInfo {
|
||||
@@ -432,6 +434,7 @@ struct PandaState @0xa7649e2575e4591e {
|
||||
pedal @4;
|
||||
uno @5;
|
||||
dos @6;
|
||||
red @7;
|
||||
}
|
||||
|
||||
enum UsbPowerMode {
|
||||
@@ -660,12 +663,12 @@ struct ControlsState @0x97ff69c53601abf1 {
|
||||
decelForTurnDEPRECATED @47 :Bool;
|
||||
decelForModelDEPRECATED @54 :Bool;
|
||||
awarenessStatusDEPRECATED @26 :Float32;
|
||||
angleSteersDEPRECATED @13 :Float32;
|
||||
angleSteers @13 :Float32; # dp
|
||||
vCurvatureDEPRECATED @46 :Float32;
|
||||
mapValidDEPRECATED @49 :Bool;
|
||||
jerkFactorDEPRECATED @12 :Float32;
|
||||
steerOverrideDEPRECATED @20 :Bool;
|
||||
steeringAngleDesiredDegDEPRECATED @29 :Float32;
|
||||
steeringAngleDesiredDeg @29 :Float32; # dp
|
||||
}
|
||||
|
||||
struct ModelDataV2 {
|
||||
@@ -869,6 +872,9 @@ struct LateralPlan @0xe1e9318e2ae8b51e {
|
||||
curvatures @27 :List(Float32);
|
||||
curvatureRates @28 :List(Float32);
|
||||
|
||||
# dp
|
||||
dpALCAllowed @29 :Bool;
|
||||
|
||||
enum Desire {
|
||||
none @0;
|
||||
turnLeft @1;
|
||||
@@ -1460,5 +1466,6 @@ struct Event {
|
||||
kalmanOdometryDEPRECATED @65 :Legacy.KalmanOdometry;
|
||||
gpsLocationDEPRECATED @21 :GpsLocationData;
|
||||
uiLayoutStateDEPRECATED @57 :Legacy.UiLayoutState;
|
||||
dragonConf @80 :Dp.DragonConf;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -61,6 +61,10 @@ services = {
|
||||
"modelV2": (True, 20., 40),
|
||||
"managerState": (True, 2., 1),
|
||||
"uploaderState": (True, 0., 1),
|
||||
|
||||
# dp
|
||||
"thermal": (True, 2., 1),
|
||||
"dragonConf": (False, 2.),
|
||||
}
|
||||
service_list = {name: Service(new_port(idx), *vals) for # type: ignore
|
||||
idx, (name, vals) in enumerate(services.items())}
|
||||
|
||||
@@ -49,7 +49,6 @@ class VisionBuf {
|
||||
|
||||
// ion
|
||||
int handle = 0;
|
||||
bool owner = false;
|
||||
|
||||
void allocate(size_t len);
|
||||
void import();
|
||||
|
||||
@@ -62,7 +62,6 @@ void VisionBuf::allocate(size_t len) {
|
||||
|
||||
memset(addr, 0, ion_alloc.len);
|
||||
|
||||
this->owner = true;
|
||||
this->len = len;
|
||||
this->mmap_len = ion_alloc.len;
|
||||
this->addr = addr;
|
||||
@@ -82,7 +81,6 @@ void VisionBuf::import(){
|
||||
err = ioctl(ion_fd, ION_IOC_IMPORT, &fd_data);
|
||||
assert(err == 0);
|
||||
|
||||
this->owner = false;
|
||||
this->handle = fd_data.handle;
|
||||
this->addr = mmap(NULL, this->mmap_len, PROT_READ | PROT_WRITE, MAP_SHARED, this->fd, 0);
|
||||
assert(this->addr != MAP_FAILED);
|
||||
@@ -139,10 +137,6 @@ void VisionBuf::free() {
|
||||
munmap(this->addr, this->mmap_len);
|
||||
close(this->fd);
|
||||
|
||||
// Free the ION buffer if we also shared it
|
||||
if (this->owner){
|
||||
struct ion_handle_data handle_data = {.handle = this->handle};
|
||||
int ret = ioctl(ion_fd, ION_IOC_FREE, &handle_data);
|
||||
assert(ret == 0);
|
||||
}
|
||||
struct ion_handle_data handle_data = {.handle = this->handle};
|
||||
ioctl(ion_fd, ION_IOC_FREE, &handle_data);
|
||||
}
|
||||
|
||||
@@ -122,7 +122,6 @@ void VisionIpcServer::listener(){
|
||||
bufs[i].buf_cl = 0;
|
||||
bufs[i].copy_q = 0;
|
||||
bufs[i].handle = 0;
|
||||
bufs[i].owner = false;
|
||||
|
||||
bufs[i].server_id = server_id;
|
||||
}
|
||||
|
||||
@@ -1,11 +1,11 @@
|
||||
import os
|
||||
from pathlib import Path
|
||||
|
||||
from selfdrive.hardware import PC
|
||||
from selfdrive.hardware import PC, JETSON
|
||||
|
||||
BASEDIR = os.path.abspath(os.path.join(os.path.dirname(os.path.realpath(__file__)), "../"))
|
||||
|
||||
if PC:
|
||||
if PC or JETSON:
|
||||
PERSIST = os.path.join(str(Path.home()), ".comma", "persist")
|
||||
else:
|
||||
PERSIST = "/persist"
|
||||
|
||||
80
common/dp_common.py
Normal file
@@ -0,0 +1,80 @@
|
||||
#!/usr/bin/env python3.7
|
||||
import subprocess
|
||||
from cereal import car
|
||||
from common.params import Params
|
||||
from common.realtime import sec_since_boot
|
||||
import os
|
||||
params = Params()
|
||||
PARAM_PATH = params.get_params_path() + '/d/'
|
||||
LAST_MODIFIED = PARAM_PATH + "dp_last_modified"
|
||||
|
||||
def is_online():
|
||||
try:
|
||||
return not subprocess.call(["ping", "-W", "4", "-c", "1", "117.28.245.92"])
|
||||
except ProcessLookupError:
|
||||
return False
|
||||
|
||||
def common_controller_ctrl(enabled, dragonconf, blinker_on, steer_req, v_ego):
|
||||
if enabled:
|
||||
if dragonconf.dpLateralMode == 0 and blinker_on:
|
||||
steer_req = 0 if isinstance(steer_req, int) else False
|
||||
return steer_req
|
||||
|
||||
def common_interface_atl(ret, atl):
|
||||
# dp
|
||||
enable_acc = ret.cruiseState.enabled
|
||||
if atl and ret.cruiseState.available:
|
||||
enable_acc = True
|
||||
if ret.gearShifter in [car.CarState.GearShifter.reverse, car.CarState.GearShifter.park]:
|
||||
enable_acc = False
|
||||
if ret.seatbeltUnlatched or ret.doorOpen:
|
||||
enable_acc = False
|
||||
return enable_acc
|
||||
|
||||
def common_interface_get_params_lqr(ret):
|
||||
if params.get_bool('dp_lqr'):
|
||||
ret.lateralTuning.init('lqr')
|
||||
ret.lateralTuning.lqr.scale = 1500.0
|
||||
ret.lateralTuning.lqr.ki = 0.05
|
||||
|
||||
ret.lateralTuning.lqr.a = [0., 1., -0.22619643, 1.21822268]
|
||||
ret.lateralTuning.lqr.b = [-1.92006585e-04, 3.95603032e-05]
|
||||
ret.lateralTuning.lqr.c = [1., 0.]
|
||||
ret.lateralTuning.lqr.k = [-110.73572306, 451.22718255]
|
||||
ret.lateralTuning.lqr.l = [0.3233671, 0.3185757]
|
||||
ret.lateralTuning.lqr.dcGain = 0.002237852961363602
|
||||
return ret
|
||||
|
||||
|
||||
def get_last_modified(delay, old_check, old_modified):
|
||||
new_check = sec_since_boot()
|
||||
if old_check is None or new_check - old_check >= delay:
|
||||
return new_check, os.stat(LAST_MODIFIED).st_mtime
|
||||
else:
|
||||
return old_check, old_modified
|
||||
|
||||
def param_get_if_updated(param, type, old_val, old_modified):
|
||||
try:
|
||||
modified = os.stat(PARAM_PATH + param).st_mtime
|
||||
except OSError:
|
||||
return old_val, old_modified
|
||||
if old_modified != modified:
|
||||
new_val = param_get(param, type, old_val)
|
||||
new_modified = modified
|
||||
else:
|
||||
new_val = old_val
|
||||
new_modified = old_modified
|
||||
return new_val, new_modified
|
||||
|
||||
def param_get(param_name, type, default):
|
||||
try:
|
||||
val = params.get(param_name, encoding='utf8').rstrip('\x00')
|
||||
if type == 'bool':
|
||||
val = val == '1'
|
||||
elif type == 'int':
|
||||
val = int(val)
|
||||
elif type == 'float':
|
||||
val = float(val)
|
||||
except (TypeError, ValueError):
|
||||
val = default
|
||||
return val
|
||||
227
common/dp_conf.py
Normal file
@@ -0,0 +1,227 @@
|
||||
#!/usr/bin/env python3.7
|
||||
import os
|
||||
import sys
|
||||
import json
|
||||
import time
|
||||
from math import floor
|
||||
|
||||
'''
|
||||
* type: Bool, Int8, UInt8, UInt16, Float32
|
||||
* conf_type: param, struct
|
||||
* dependencies needs to use struct and loaded prior so we don't have to read the param multiple times.
|
||||
* update_once: True, False (the param will only load up once, need both param and struct defined)
|
||||
'''
|
||||
confs = [
|
||||
# thermald data
|
||||
{'name': 'dp_thermal_started', 'default': False, 'type': 'Bool', 'conf_type': ['struct']},
|
||||
{'name': 'dp_thermal_overheat', 'default': False, 'type': 'Bool', 'conf_type': ['struct']},
|
||||
|
||||
{'name': 'dp_atl', 'default': False, 'type': 'Bool', 'conf_type': ['param', 'struct'], 'update_once': True},
|
||||
# dashcam related
|
||||
{'name': 'dp_dashcamd', 'default': False, 'type': 'Bool', 'conf_type': ['param', 'struct']},
|
||||
# auto shutdown
|
||||
{'name': 'dp_auto_shutdown', 'default': False, 'type': 'Bool', 'conf_type': ['param', 'struct']},
|
||||
{'name': 'dp_auto_shutdown_in', 'default': 90, 'type': 'UInt16', 'min': 0, 'max': 600, 'depends': [{'name': 'dp_auto_shutdown', 'vals': [True]}], 'conf_type': ['param']},
|
||||
# service
|
||||
{'name': 'dp_updated', 'default': False, 'type': 'Bool', 'conf_type': ['param']},
|
||||
{'name': 'dp_logger', 'default': False, 'type': 'Bool', 'conf_type': ['param']},
|
||||
{'name': 'dp_athenad', 'default': False, 'type': 'Bool', 'depends': [{'name': 'dp_atl', 'vals': [False]}], 'conf_type': ['param', 'struct'], 'update_once': True},
|
||||
{'name': 'dp_uploader', 'default': False, 'type': 'Bool', 'depends': [{'name': 'dp_atl', 'vals': [False]}], 'conf_type': ['param', 'struct'], 'update_once': True},
|
||||
# {'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_lateral_mode', 'default': 1, 'type': 'UInt8', 'min': 0, 'max': 2, 'conf_type': ['param', 'struct']},
|
||||
{'name': 'dp_signal_off_delay', 'default': 3., 'type': 'Float32', 'min': 0., 'max': 10., 'depends': [{'name': 'dp_lateral_mode', 'vals': [0]}], 'conf_type': ['param', 'struct']},
|
||||
{'name': 'dp_lc_min_mph', 'default': 45, 'type': 'UInt8', 'min': 0, 'max': 255, 'depends': [{'name': 'dp_lateral_mode', 'vals': [1,2]}], 'conf_type': ['param', 'struct']},
|
||||
{'name': 'dp_lc_auto_cont', 'default': False, 'type': 'Bool', 'depends': [{'name': 'dp_lateral_mode', 'vals': [2]}], 'conf_type': ['param', 'struct']},
|
||||
{'name': 'dp_lc_auto_min_mph', 'default': 60, 'type': 'UInt8', 'min': 0, 'max': 255, 'depends': [{'name': 'dp_lateral_mode', 'vals': [2]}], 'conf_type': ['param', 'struct']},
|
||||
{'name': 'dp_lc_auto_delay', 'default': 3., 'type': 'Float32', 'min': 0., 'max': 10., 'depends': [{'name': 'dp_lateral_mode', 'vals': [2]}], 'conf_type': ['param', 'struct']},
|
||||
# long ctrl
|
||||
{'name': 'dp_allow_gas', 'default': False, 'type': 'Bool', 'depends': [{'name': 'dp_atl', 'vals': [False]}], 'conf_type': ['param', 'struct']},
|
||||
{'name': 'dp_following_profile_ctrl', 'default': False, 'type': 'Bool', 'depends': [{'name': 'dp_atl', 'vals': [False]}], 'conf_type': ['param', 'struct']},
|
||||
{'name': 'dp_following_profile', 'default': 0, 'type': 'UInt8', 'min': 0, 'max': 2, 'depends': [{'name': 'dp_atl', 'vals': [False]}, {'name': 'dp_following_profile_ctrl', 'vals': [True]}], 'conf_type': ['param', 'struct']},
|
||||
{'name': 'dp_accel_profile_ctrl', 'default': False, 'type': 'Bool', 'depends': [{'name': 'dp_atl', 'vals': [False]}], 'conf_type': ['param', 'struct']},
|
||||
{'name': 'dp_accel_profile', 'default': 0, 'type': 'UInt8', 'min': 0, 'max': 2, 'depends': [{'name': 'dp_atl', 'vals': [False]}, {'name': 'dp_accel_profile_ctrl', 'vals': [True]}], 'conf_type': ['param', 'struct']},
|
||||
# safety
|
||||
{'name': 'dp_gear_check', 'default': True, 'type': 'Bool', 'depends': [{'name': 'dp_atl', 'vals': [False]}], 'conf_type': ['param', 'struct']},
|
||||
{'name': 'dp_speed_check', 'default': True, 'type': 'Bool', 'conf_type': ['param', 'struct']},
|
||||
{'name': 'dp_temp_monitor', 'default': True, 'type': 'Bool', 'conf_type': ['param']},
|
||||
# UIs
|
||||
{'name': 'dp_ui_display_mode', 'default': 0, 'type': 'UInt8', 'min': 0, 'max': 2, 'conf_type': ['param', 'struct']},
|
||||
{'name': 'dp_ui_speed', 'default': True, 'type': 'Bool', 'conf_type': ['param', 'struct']},
|
||||
{'name': 'dp_ui_event', 'default': True, 'type': 'Bool', 'conf_type': ['param', 'struct']},
|
||||
{'name': 'dp_ui_max_speed', 'default': True, 'type': 'Bool', 'conf_type': ['param', 'struct']},
|
||||
{'name': 'dp_ui_face', 'default': True, 'type': 'Bool', 'conf_type': ['param', 'struct']},
|
||||
{'name': 'dp_ui_lane', 'default': True, 'type': 'Bool', 'conf_type': ['param', 'struct']},
|
||||
{'name': 'dp_ui_lead', 'default': True, 'type': 'Bool', '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', 'conf_type': ['param', 'struct']},
|
||||
{'name': 'dp_ui_brightness', 'default': 0, 'type': 'UInt8', 'min': 0, 'max': 100, 'conf_type': ['param', 'struct']},
|
||||
{'name': 'dp_ui_volume', 'default': -5, 'type': 'Int8', 'min': -5, 'max': 100, 'conf_type': ['param', 'struct']},
|
||||
# toyota
|
||||
{'name': 'dp_lexus_rx_rpm_fix', 'default': False, 'type': 'Bool', 'depends': [{'name': 'dp_atl', 'vals': [False]}], 'conf_type': ['param']},
|
||||
{'name': 'dp_toyota_ldw', 'default': True, 'type': 'Bool', 'conf_type': ['param', 'struct']},
|
||||
{'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_fp_btn_link', 'default': False, 'type': 'Bool', 'conf_type': ['param']},
|
||||
{'name': 'dp_toyota_ap_btn_link', 'default': False, 'type': 'Bool', 'conf_type': ['param']},
|
||||
{'name': 'dp_toyota_disable_relay', 'default': False, 'type': 'Bool', 'conf_type': ['param']},
|
||||
{'name': 'dp_toyota_cruise_override', 'default': False, 'type': 'Bool', 'depends': [{'name': 'dp_atl', 'vals': [False]}], 'conf_type': ['param', 'struct']},
|
||||
{'name': 'dp_toyota_cruise_override_vego', 'default': False, 'type': 'Bool', 'depends': [{'name': 'dp_atl', 'vals': [False]}, {'name': 'dp_toyota_cruise_override', 'vals': [True]}], 'conf_type': ['param', 'struct']},
|
||||
{'name': 'dp_toyota_cruise_override_at', 'default': 44, 'type': 'Float32', 'depends': [{'name': 'dp_atl', 'vals': [False]}, {'name': 'dp_toyota_cruise_override', 'vals': [True]}], 'min': 0, 'max': 50., 'conf_type': ['param', 'struct']},
|
||||
{'name': 'dp_toyota_cruise_override_speed', 'default': 32, 'type': 'Float32', 'depends': [{'name': 'dp_atl', 'vals': [False]}, {'name': 'dp_toyota_cruise_override', 'vals': [True]}], 'min': 0, 'max': 50., 'conf_type': ['param', 'struct']},
|
||||
# hyundai
|
||||
{'name': 'dp_hkg_smart_mdps', 'default': False, 'type': 'Bool', 'conf_type': ['param']},
|
||||
# honda
|
||||
{'name': 'dp_honda_eps_mod', 'default': False, 'type': 'Bool', 'conf_type': ['param']},
|
||||
{'name': 'dp_honda_kmh_display', 'default': False, 'type': 'Bool', 'conf_type': ['param']},
|
||||
# volkswagen
|
||||
{'name': 'dp_vw_panda', 'default': False, 'type': 'Bool', 'conf_type': ['param']},
|
||||
{'name': 'dp_vw_timebomb_assist', 'default': False, 'type': 'Bool', 'conf_type': ['param', 'struct']},
|
||||
#misc
|
||||
{'name': 'dp_ip_addr', 'default': '', 'type': 'Text', 'conf_type': ['struct']},
|
||||
{'name': 'dp_fan_mode', 'default': 0, 'type': 'UInt8', 'min': 0, 'max': 2, 'conf_type': ['param']},
|
||||
{'name': 'dp_last_modified', 'default': str(floor(time.time())), 'type': 'Text', 'conf_type': ['param']},
|
||||
{'name': 'dp_camera_offset', 'default': 6, 'type': 'Int8', 'min': -100, 'max': 100, 'conf_type': ['param', 'struct']},
|
||||
{'name': 'dp_path_offset', 'default': 0, 'type': 'Int8', 'min': -100, 'max': 100, 'conf_type': ['param', 'struct']},
|
||||
|
||||
{'name': 'dp_locale', 'default': 'en-US', 'type': 'Text', 'conf_type': ['param', 'struct'], 'update_once': True},
|
||||
{'name': 'dp_reg', 'default': True, 'type': 'Bool', 'conf_type': ['param']},
|
||||
# sr learner related
|
||||
{'name': 'dp_sr_learner', 'default': True, 'type': 'Bool', 'conf_type': ['param', 'struct']},
|
||||
{'name': 'dp_sr_custom', 'default': 9.99, 'min': 9.99, 'max': 30., 'type': 'Float32', 'depends': [{'name': 'dp_sr_learner', 'vals': [False]}], 'conf_type': ['param', 'struct']},
|
||||
{'name': 'dp_sr_stock', 'default': 9.99, 'min': 9.99, 'max': 100., 'type': 'Float32', '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']},
|
||||
|
||||
{'name': 'dp_appd', 'default': False, 'type': 'Bool', 'conf_type': ['param', 'struct']},
|
||||
{'name': 'dp_jetson', 'default': False, 'type': 'Bool', 'conf_type': ['param']},
|
||||
{'name': 'dp_car_assigned', 'default': '', 'type': 'Text', 'conf_type': ['param']},
|
||||
{'name': 'dp_car_list', 'default': '', 'type': 'Text', 'conf_type': ['param']},
|
||||
{'name': 'dp_no_batt', 'default': False, 'type': 'Bool', 'conf_type': ['param']},
|
||||
{'name': 'dp_panda_fake_black', 'default': False, 'type': 'Bool', 'conf_type': ['param']},
|
||||
{'name': 'dp_panda_no_gps', 'default': False, 'type': 'Bool', 'conf_type': ['param']},
|
||||
{'name': 'dp_last_candidate', 'default': '', 'type': 'Text', 'conf_type': ['param']},
|
||||
{'name': 'dp_prebuilt', 'default': False, 'type': 'Bool', 'conf_type': ['param']},
|
||||
{'name': 'dp_gpxd', 'default': False, 'type': 'Bool', 'conf_type': ['param']},
|
||||
{'name': 'dp_mapd', 'default': False, 'type': 'Bool', 'conf_type': ['param', 'struct']},
|
||||
# custom server support
|
||||
# {'name': 'dp_custom_server', 'default': False, 'type': 'Bool', 'conf_type': ['param', 'struct']},
|
||||
# {'name': 'dp_custom_server_url', 'default': 'api.retropilot.org', 'type': 'Text', 'depends': [{'name': 'dp_custom_server', 'vals': [True]}], 'conf_type': ['param', 'struct']},
|
||||
]
|
||||
|
||||
def get_definition(name):
|
||||
for conf in confs:
|
||||
if conf['name'] == name:
|
||||
return conf
|
||||
return None
|
||||
|
||||
def to_param_val(name, val):
|
||||
conf = get_definition(name)
|
||||
if conf is not None:
|
||||
type = conf['type'].lower()
|
||||
try:
|
||||
if 'bool' in type:
|
||||
val = '1' if val else '0'
|
||||
elif 'int' in type:
|
||||
val = int(val)
|
||||
elif 'float' in type:
|
||||
val = float(val)
|
||||
return str(val)
|
||||
except (ValueError, TypeError):
|
||||
return ''
|
||||
return ''
|
||||
|
||||
def to_struct_val(name, val):
|
||||
conf = get_definition(name)
|
||||
if conf is not None:
|
||||
try:
|
||||
type = conf['type'].lower()
|
||||
if 'bool' in type:
|
||||
val = True if val == '1' else False
|
||||
elif 'int' in type:
|
||||
val = int(val)
|
||||
elif 'float' in type:
|
||||
val = float(val)
|
||||
return val
|
||||
except (ValueError, TypeError):
|
||||
return None
|
||||
return None
|
||||
|
||||
'''
|
||||
function to convert param name into struct name.
|
||||
'''
|
||||
def get_struct_name(snake_str):
|
||||
components = snake_str.split('_')
|
||||
# We capitalize the first letter of each component except the first one
|
||||
# with the 'title' method and join them together.
|
||||
return components[0] + ''.join(x.title() for x in components[1:])
|
||||
|
||||
'''
|
||||
function to generate struct for log.capnp
|
||||
'''
|
||||
def gen_log_struct():
|
||||
count = 0
|
||||
str = "# dp\n"
|
||||
str += "struct DragonConf {\n"
|
||||
for conf in confs:
|
||||
name = get_struct_name(conf['name'])
|
||||
if 'struct' in conf['conf_type']:
|
||||
str += f" {name} @{count} :{conf['type']};\n"
|
||||
count += 1
|
||||
str += "}"
|
||||
print(str)
|
||||
|
||||
'''
|
||||
function to generate support car list
|
||||
'''
|
||||
def get_support_car_list():
|
||||
attrs = ['FINGERPRINTS', 'FW_VERSIONS']
|
||||
cars = dict({"cars": []})
|
||||
for car_folder in [x[0] for x in os.walk('/data/openpilot/selfdrive/car')]:
|
||||
try:
|
||||
car_name = car_folder.split('/')[-1]
|
||||
if car_name != "mock":
|
||||
names = []
|
||||
for attr in attrs:
|
||||
values = __import__('selfdrive.car.%s.values' % car_name, fromlist=[attr])
|
||||
if hasattr(values, attr):
|
||||
attr_values = getattr(values, attr)
|
||||
else:
|
||||
continue
|
||||
if isinstance(attr_values, dict):
|
||||
for f, v in attr_values.items():
|
||||
if f not in names:
|
||||
names.append(f)
|
||||
names.sort()
|
||||
brand_models = {"brand": car_name.upper(), "models": names }
|
||||
cars["cars"].append(brand_models)
|
||||
except (ImportError, IOError, ValueError):
|
||||
pass
|
||||
return json.dumps(cars)
|
||||
|
||||
'''
|
||||
function to init param value.
|
||||
should add this into manager.py
|
||||
'''
|
||||
def init_params_vals(params):
|
||||
for conf in confs:
|
||||
if 'param' in conf['conf_type']:
|
||||
if conf['name'] == 'dp_car_list':
|
||||
params.put(conf['name'], get_support_car_list())
|
||||
elif params.get(conf['name']) is None:
|
||||
params.put(conf['name'], to_param_val(conf['name'], conf['default']))
|
||||
|
||||
def gen_params_cc_keys():
|
||||
for conf in confs:
|
||||
if 'param' in conf['conf_type']:
|
||||
print(" {\"%s\", PERSISTENT}," % conf['name'])
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
if (len(sys.argv) > 1) and sys.argv[1] == 'cc':
|
||||
gen_params_cc_keys()
|
||||
else:
|
||||
gen_log_struct()
|
||||
7
common/dp_time.py
Normal file
@@ -0,0 +1,7 @@
|
||||
#!/usr/bin/env python3.7
|
||||
|
||||
# delay of reading last modified
|
||||
LAST_MODIFIED_THERMALD = 10.
|
||||
LAST_MODIFIED_SYSTEMD = 1.
|
||||
LAST_MODIFIED_LANE_PLANNER = 3.
|
||||
LAST_MODIFIED_UPLOADER = 10.
|
||||
14
common/i18n.py
Normal file
@@ -0,0 +1,14 @@
|
||||
import gettext
|
||||
from selfdrive.hardware import EON
|
||||
from selfdrive.hardware.eon.hardware import getprop
|
||||
|
||||
locale_dir = '/data/openpilot/selfdrive/assets/locales'
|
||||
supported_language = ['en-US', 'zh-TW', 'zh-CN', 'ja-JP', 'ko-KR']
|
||||
|
||||
def get_locale():
|
||||
return getprop("persist.sys.locale") if EON else 'en-US'
|
||||
|
||||
def events():
|
||||
i18n = gettext.translation('events', localedir=locale_dir, fallback=True, languages=[get_locale()])
|
||||
i18n.install()
|
||||
return i18n.gettext
|
||||
@@ -158,7 +158,7 @@ class SwagLogger(logging.Logger):
|
||||
evt.update(kwargs)
|
||||
if 'error' in kwargs:
|
||||
self.error(evt)
|
||||
if 'debug' in kwargs:
|
||||
elif 'debug' in kwargs:
|
||||
self.debug(evt)
|
||||
else:
|
||||
self.info(evt)
|
||||
|
||||
@@ -26,3 +26,5 @@ cdef extern from "selfdrive/common/params.h":
|
||||
int putBool(string, bool) nogil
|
||||
bool checkKey(string) nogil
|
||||
void clearAll(ParamKeyType)
|
||||
|
||||
string get_params_path()
|
||||
|
||||
@@ -106,6 +106,8 @@ cdef class Params:
|
||||
with nogil:
|
||||
self.p.remove(k)
|
||||
|
||||
def get_params_path(self):
|
||||
return self.p.get_params_path().decode("utf-8")
|
||||
|
||||
def put_nonblocking(key, val, d=None):
|
||||
def f(key, val):
|
||||
|
||||
@@ -6,7 +6,7 @@ import multiprocessing
|
||||
from typing import Optional
|
||||
|
||||
from common.clock import sec_since_boot # pylint: disable=no-name-in-module, import-error
|
||||
from selfdrive.hardware import PC, TICI
|
||||
from selfdrive.hardware import PC, TICI, JETSON
|
||||
|
||||
|
||||
# time step for each process
|
||||
@@ -33,12 +33,12 @@ class Priority:
|
||||
|
||||
|
||||
def set_realtime_priority(level: int) -> None:
|
||||
if not PC:
|
||||
if JETSON or not PC:
|
||||
os.sched_setscheduler(0, os.SCHED_FIFO, os.sched_param(level)) # type: ignore[attr-defined]
|
||||
|
||||
|
||||
def set_core_affinity(core: int) -> None:
|
||||
if not PC:
|
||||
if JETSON or not PC:
|
||||
os.sched_setaffinity(0, [core,])
|
||||
|
||||
|
||||
|
||||
@@ -33,6 +33,7 @@ class TextWindow:
|
||||
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)
|
||||
|
||||
|
||||
@@ -5,12 +5,14 @@ from selfdrive.hardware import TICI
|
||||
|
||||
## -- hardcoded hardware params --
|
||||
eon_f_focal_length = 910.0
|
||||
eon_d_focal_length = 650.0
|
||||
eon_d_focal_length = 860.0
|
||||
leon_d_focal_length = 650.0
|
||||
tici_f_focal_length = 2648.0
|
||||
tici_e_focal_length = tici_d_focal_length = 567.0 # probably wrong? magnification is not consistent across frame
|
||||
|
||||
eon_f_frame_size = (1164, 874)
|
||||
eon_d_frame_size = (816, 612)
|
||||
eon_d_frame_size = (1152, 864)
|
||||
leon_d_frame_size = (816, 612)
|
||||
tici_f_frame_size = tici_e_frame_size = tici_d_frame_size = (1928, 1208)
|
||||
|
||||
# aka 'K' aka camera_frame_from_view_frame
|
||||
@@ -20,6 +22,11 @@ eon_fcam_intrinsics = np.array([
|
||||
[0.0, 0.0, 1.0]])
|
||||
eon_intrinsics = eon_fcam_intrinsics # xx
|
||||
|
||||
leon_dcam_intrinsics = np.array([
|
||||
[leon_d_focal_length, 0.0, float(leon_d_frame_size[0])/2],
|
||||
[0.0, leon_d_focal_length, float(leon_d_frame_size[1])/2],
|
||||
[0.0, 0.0, 1.0]])
|
||||
|
||||
eon_dcam_intrinsics = np.array([
|
||||
[eon_d_focal_length, 0.0, float(eon_d_frame_size[0])/2],
|
||||
[0.0, eon_d_focal_length, float(eon_d_frame_size[1])/2],
|
||||
|
||||
4
installer/continue_openpilot.sh
Executable file
@@ -0,0 +1,4 @@
|
||||
#!/usr/bin/bash
|
||||
|
||||
cd /data/openpilot
|
||||
exec ./launch_openpilot.sh
|
||||
7
installer/updater/oneplus.json
Normal file
@@ -0,0 +1,7 @@
|
||||
{
|
||||
"ota_url": "https://commadist.azureedge.net/neosupdate/ota-signed-c4f56c62c5603c86e2ae9d83008a8d42a91319979661d0c42fb97b85d9112266.zip",
|
||||
"ota_hash": "c4f56c62c5603c86e2ae9d83008a8d42a91319979661d0c42fb97b85d9112266",
|
||||
"recovery_url": "https://commadist.azureedge.net/neosupdate/recovery-db31ffe79dfd60be966fba6d1525a5081a920062b883644dc8f5734bcc6806bb.img",
|
||||
"recovery_len": 15926572,
|
||||
"recovery_hash": "db31ffe79dfd60be966fba6d1525a5081a920062b883644dc8f5734bcc6806bb"
|
||||
}
|
||||
BIN
installer/updater/update.zip
Normal file
@@ -1,803 +0,0 @@
|
||||
#include <sys/stat.h>
|
||||
#include <sys/statvfs.h>
|
||||
#include <unistd.h>
|
||||
|
||||
#include <cassert>
|
||||
#include <cstdio>
|
||||
#include <cstdlib>
|
||||
#include <cstring>
|
||||
#include <fstream>
|
||||
#include <iostream>
|
||||
#include <memory>
|
||||
#include <mutex>
|
||||
#include <sstream>
|
||||
#include <string>
|
||||
#include <thread>
|
||||
|
||||
#include <curl/curl.h>
|
||||
#include <openssl/sha.h>
|
||||
#include <EGL/egl.h>
|
||||
#include <EGL/eglext.h>
|
||||
#include <GLES3/gl3.h>
|
||||
#include "nanovg.h"
|
||||
#define NANOVG_GLES3_IMPLEMENTATION
|
||||
#include "json11.hpp"
|
||||
#include "nanovg_gl.h"
|
||||
#include "nanovg_gl_utils.h"
|
||||
|
||||
#include "selfdrive/common/framebuffer.h"
|
||||
#include "selfdrive/common/touch.h"
|
||||
#include "selfdrive/common/util.h"
|
||||
|
||||
#define USER_AGENT "NEOSUpdater-0.2"
|
||||
|
||||
#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"
|
||||
|
||||
#define UPDATE_DIR "/data/neoupdate"
|
||||
|
||||
extern const uint8_t bin_opensans_regular[] asm("_binary_opensans_regular_ttf_start");
|
||||
extern const uint8_t bin_opensans_regular_end[] asm("_binary_opensans_regular_ttf_end");
|
||||
extern const uint8_t bin_opensans_semibold[] asm("_binary_opensans_semibold_ttf_start");
|
||||
extern const uint8_t bin_opensans_semibold_end[] asm("_binary_opensans_semibold_ttf_end");
|
||||
extern const uint8_t bin_opensans_bold[] asm("_binary_opensans_bold_ttf_start");
|
||||
extern const uint8_t bin_opensans_bold_end[] asm("_binary_opensans_bold_ttf_end");
|
||||
|
||||
namespace {
|
||||
|
||||
std::string sha256_file(std::string fn, size_t limit=0) {
|
||||
SHA256_CTX ctx;
|
||||
SHA256_Init(&ctx);
|
||||
|
||||
FILE *file = fopen(fn.c_str(), "rb");
|
||||
if (!file) return "";
|
||||
|
||||
const size_t buf_size = 8192;
|
||||
std::unique_ptr<char[]> buffer( new char[ buf_size ] );
|
||||
|
||||
bool read_limit = (limit != 0);
|
||||
while (true) {
|
||||
size_t read_size = buf_size;
|
||||
if (read_limit) read_size = std::min(read_size, limit);
|
||||
size_t bytes_read = fread(buffer.get(), 1, read_size, file);
|
||||
if (!bytes_read) break;
|
||||
|
||||
SHA256_Update(&ctx, buffer.get(), bytes_read);
|
||||
|
||||
if (read_limit) {
|
||||
limit -= bytes_read;
|
||||
if (limit == 0) break;
|
||||
}
|
||||
}
|
||||
|
||||
uint8_t hash[SHA256_DIGEST_LENGTH];
|
||||
SHA256_Final(hash, &ctx);
|
||||
|
||||
fclose(file);
|
||||
|
||||
return util::tohex(hash, sizeof(hash));
|
||||
}
|
||||
|
||||
size_t download_string_write(void *ptr, size_t size, size_t nmeb, void *up) {
|
||||
size_t sz = size * nmeb;
|
||||
((std::string*)up)->append((char*)ptr, sz);
|
||||
return sz;
|
||||
}
|
||||
|
||||
std::string download_string(CURL *curl, std::string url) {
|
||||
std::string os;
|
||||
|
||||
curl_easy_setopt(curl, CURLOPT_URL, url.c_str());
|
||||
curl_easy_setopt(curl, CURLOPT_FOLLOWLOCATION, 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);
|
||||
|
||||
curl_easy_setopt(curl, CURLOPT_NOPROGRESS, 1);
|
||||
|
||||
curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, download_string_write);
|
||||
curl_easy_setopt(curl, CURLOPT_WRITEDATA, &os);
|
||||
CURLcode res = curl_easy_perform(curl);
|
||||
if (res != CURLE_OK) {
|
||||
return "";
|
||||
}
|
||||
|
||||
return os;
|
||||
}
|
||||
|
||||
size_t download_file_write(void *ptr, size_t size, size_t nmeb, void *up) {
|
||||
return fwrite(ptr, size, nmeb, (FILE*)up);
|
||||
}
|
||||
|
||||
int battery_capacity() {
|
||||
std::string bat_cap_s = util::read_file("/sys/class/power_supply/battery/capacity");
|
||||
return atoi(bat_cap_s.c_str());
|
||||
}
|
||||
|
||||
int battery_current() {
|
||||
std::string current_now_s = util::read_file("/sys/class/power_supply/battery/current_now");
|
||||
return atoi(current_now_s.c_str());
|
||||
}
|
||||
|
||||
bool check_battery() {
|
||||
int bat_cap = battery_capacity();
|
||||
int current_now = battery_current();
|
||||
return bat_cap > 35 || (current_now < 0 && bat_cap > 10);
|
||||
}
|
||||
|
||||
bool check_space() {
|
||||
struct statvfs stat;
|
||||
if (statvfs("/data/", &stat) != 0) {
|
||||
return false;
|
||||
}
|
||||
size_t space = stat.f_bsize * stat.f_bavail;
|
||||
return space > 2000000000ULL; // 2GB
|
||||
}
|
||||
|
||||
static void start_settings_activity(const char* name) {
|
||||
char launch_cmd[1024];
|
||||
snprintf(launch_cmd, sizeof(launch_cmd),
|
||||
"am start -W --ez :settings:show_fragment_as_subsetting true -n 'com.android.settings/.%s'", 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;
|
||||
|
||||
TouchState touch;
|
||||
|
||||
int fb_w, fb_h;
|
||||
|
||||
std::unique_ptr<FrameBuffer> fb;
|
||||
NVGcontext *vg = NULL;
|
||||
int font_regular;
|
||||
int font_semibold;
|
||||
int font_bold;
|
||||
|
||||
std::thread update_thread_handle;
|
||||
|
||||
std::mutex lock;
|
||||
|
||||
enum UpdateState {
|
||||
CONFIRMATION,
|
||||
LOW_BATTERY,
|
||||
RUNNING,
|
||||
ERROR,
|
||||
};
|
||||
UpdateState state;
|
||||
|
||||
std::string progress_text;
|
||||
float progress_frac;
|
||||
|
||||
std::string error_text;
|
||||
|
||||
std::string low_battery_text;
|
||||
std::string low_battery_title;
|
||||
std::string low_battery_context;
|
||||
std::string battery_cap_text;
|
||||
int min_battery_cap = 35;
|
||||
|
||||
// button
|
||||
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;
|
||||
|
||||
void ui_init() {
|
||||
touch_init(&touch);
|
||||
|
||||
fb = std::make_unique<FrameBuffer>("updater", 0x00001000, false, &fb_w, &fb_h);
|
||||
|
||||
fb->set_power(HWC_POWER_MODE_NORMAL);
|
||||
|
||||
vg = nvgCreateGLES3(NVG_ANTIALIAS | NVG_STENCIL_STROKES | NVG_DEBUG);
|
||||
assert(vg);
|
||||
|
||||
font_regular = nvgCreateFontMem(vg, "opensans_regular", (unsigned char*)bin_opensans_regular, (bin_opensans_regular_end - bin_opensans_regular), 0);
|
||||
assert(font_regular >= 0);
|
||||
|
||||
font_semibold = nvgCreateFontMem(vg, "opensans_semibold", (unsigned char*)bin_opensans_semibold, (bin_opensans_semibold_end - bin_opensans_semibold), 0);
|
||||
assert(font_semibold >= 0);
|
||||
|
||||
font_bold = nvgCreateFontMem(vg, "opensans_bold", (unsigned char*)bin_opensans_bold, (bin_opensans_bold_end - bin_opensans_bold), 0);
|
||||
assert(font_bold >= 0);
|
||||
|
||||
b_w = 640;
|
||||
balt_x = 200;
|
||||
b_x = fb_w-b_w-200;
|
||||
b_y = 720;
|
||||
b_h = 220;
|
||||
|
||||
if (download_stage(true)) {
|
||||
state = RUNNING;
|
||||
update_thread_handle = std::thread(&Updater::run_stages, this);
|
||||
} else {
|
||||
state = CONFIRMATION;
|
||||
}
|
||||
}
|
||||
|
||||
int download_file_xferinfo(curl_off_t dltotal, curl_off_t dlno,
|
||||
curl_off_t ultotal, curl_off_t ulnow) {
|
||||
{
|
||||
std::lock_guard<std::mutex> guard(lock);
|
||||
if (dltotal != 0) {
|
||||
progress_frac = (float) dlno / dltotal;
|
||||
}
|
||||
}
|
||||
// printf("info: %ld %ld %f\n", dltotal, dlno, progress_frac);
|
||||
return 0;
|
||||
}
|
||||
|
||||
bool download_file(std::string url, std::string out_fn) {
|
||||
FILE *of = fopen(out_fn.c_str(), "ab");
|
||||
assert(of);
|
||||
|
||||
CURLcode res;
|
||||
long last_resume_from = 0;
|
||||
|
||||
fseek(of, 0, SEEK_END);
|
||||
|
||||
int tries = 4;
|
||||
|
||||
bool ret = false;
|
||||
|
||||
while (true) {
|
||||
long resume_from = ftell(of);
|
||||
|
||||
curl_easy_setopt(curl, CURLOPT_URL, url.c_str());
|
||||
curl_easy_setopt(curl, CURLOPT_FOLLOWLOCATION, 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);
|
||||
|
||||
curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, download_file_write);
|
||||
curl_easy_setopt(curl, CURLOPT_WRITEDATA, of);
|
||||
|
||||
curl_easy_setopt(curl, CURLOPT_NOPROGRESS, 0);
|
||||
|
||||
curl_easy_setopt(curl, CURLOPT_XFERINFODATA, this);
|
||||
curl_easy_setopt(curl, CURLOPT_XFERINFOFUNCTION, &Updater::download_file_xferinfo);
|
||||
|
||||
CURLcode res = curl_easy_perform(curl);
|
||||
|
||||
long response_code = 0;
|
||||
curl_easy_getinfo(curl, CURLINFO_RESPONSE_CODE, &response_code);
|
||||
|
||||
// double content_length = 0.0;
|
||||
// curl_easy_getinfo(curl, CURLINFO_CONTENT_LENGTH_DOWNLOAD, &content_length);
|
||||
|
||||
printf("download %s res %d, code %ld, resume from %ld\n", url.c_str(), res, response_code, resume_from);
|
||||
if (res == CURLE_OK) {
|
||||
ret = true;
|
||||
break;
|
||||
} else if (res == CURLE_HTTP_RETURNED_ERROR && response_code == 416) {
|
||||
// failed because the file is already complete?
|
||||
ret = true;
|
||||
break;
|
||||
} else if (resume_from == last_resume_from) {
|
||||
// failed and dind't make make forward progress. only retry a couple times
|
||||
tries--;
|
||||
if (tries <= 0) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
last_resume_from = resume_from;
|
||||
}
|
||||
// printf("res %d\n", res);
|
||||
|
||||
// printf("- %ld %f\n", response_code, content_length);
|
||||
|
||||
fclose(of);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
void set_progress(std::string text) {
|
||||
std::lock_guard<std::mutex> guard(lock);
|
||||
progress_text = text;
|
||||
}
|
||||
|
||||
void set_error(std::string text) {
|
||||
std::lock_guard<std::mutex> guard(lock);
|
||||
error_text = text;
|
||||
state = ERROR;
|
||||
}
|
||||
|
||||
void set_battery_low() {
|
||||
std::lock_guard<std::mutex> guard(lock);
|
||||
state = LOW_BATTERY;
|
||||
}
|
||||
|
||||
void set_running() {
|
||||
std::lock_guard<std::mutex> guard(lock);
|
||||
state = RUNNING;
|
||||
}
|
||||
|
||||
std::string download(std::string url, std::string hash, std::string name, bool dry_run) {
|
||||
std::string out_fn = UPDATE_DIR "/" + util::base_name(url);
|
||||
|
||||
std::string fn_hash = sha256_file(out_fn);
|
||||
if (dry_run) {
|
||||
return (hash.compare(fn_hash) != 0) ? "" : out_fn;
|
||||
}
|
||||
|
||||
// start or resume downloading if hash doesn't match
|
||||
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 + "...");
|
||||
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;
|
||||
}
|
||||
|
||||
bool download_stage(bool dry_run = false) {
|
||||
curl = curl_easy_init();
|
||||
assert(curl);
|
||||
|
||||
// ** quick checks before download **
|
||||
|
||||
if (!check_space()) {
|
||||
if (!dry_run) 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", dry_run);
|
||||
if (recovery_fn.empty()) {
|
||||
// error'd
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// ** handle ota download **
|
||||
ota_fn = download(ota_url, ota_hash, "update", dry_run);
|
||||
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();
|
||||
while(battery_cap < min_battery_cap) {
|
||||
battery_cap = battery_capacity();
|
||||
battery_cap_text = std::to_string(battery_cap);
|
||||
util::sleep_for(1000);
|
||||
}
|
||||
set_running();
|
||||
}
|
||||
|
||||
bool sucess = download_stage();
|
||||
if (!sucess) {
|
||||
return;
|
||||
}
|
||||
|
||||
// ** install update **
|
||||
|
||||
if (!check_battery()) {
|
||||
set_battery_low();
|
||||
int battery_cap = battery_capacity();
|
||||
while(battery_cap < min_battery_cap) {
|
||||
battery_cap = battery_capacity();
|
||||
battery_cap_text = std::to_string(battery_cap);
|
||||
util::sleep_for(1000);
|
||||
}
|
||||
set_running();
|
||||
}
|
||||
|
||||
if (!recovery_fn.empty()) {
|
||||
// flash recovery
|
||||
set_progress("Flashing recovery...");
|
||||
|
||||
FILE *flash_file = fopen(recovery_fn.c_str(), "rb");
|
||||
if (!flash_file) {
|
||||
set_error("failed to flash recovery");
|
||||
return;
|
||||
}
|
||||
|
||||
FILE *recovery_dev = fopen(RECOVERY_DEV, "w+b");
|
||||
if (!recovery_dev) {
|
||||
fclose(flash_file);
|
||||
set_error("failed to flash recovery");
|
||||
return;
|
||||
}
|
||||
|
||||
const size_t buf_size = 4096;
|
||||
std::unique_ptr<char[]> buffer( new char[ buf_size ] );
|
||||
|
||||
while (true) {
|
||||
size_t bytes_read = fread(buffer.get(), 1, buf_size, flash_file);
|
||||
if (!bytes_read) break;
|
||||
|
||||
size_t bytes_written = fwrite(buffer.get(), 1, bytes_read, recovery_dev);
|
||||
if (bytes_read != bytes_written) {
|
||||
fclose(recovery_dev);
|
||||
fclose(flash_file);
|
||||
set_error("failed to flash recovery: write failed");
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
fclose(recovery_dev);
|
||||
fclose(flash_file);
|
||||
|
||||
set_progress("Verifying flash...");
|
||||
std::string new_recovery_hash = sha256_file(RECOVERY_DEV, recovery_len);
|
||||
printf("new recovery hash: %s\n", new_recovery_hash.c_str());
|
||||
|
||||
if (new_recovery_hash != recovery_hash) {
|
||||
set_error("recovery flash corrupted");
|
||||
return;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
// write arguments to recovery
|
||||
FILE *cmd_file = fopen(RECOVERY_COMMAND, "wb");
|
||||
if (!cmd_file) {
|
||||
set_error("failed to reboot into recovery");
|
||||
return;
|
||||
}
|
||||
fprintf(cmd_file, "--update_package=%s\n", ota_fn.c_str());
|
||||
fclose(cmd_file);
|
||||
|
||||
set_progress("Rebooting");
|
||||
|
||||
// remove the continue.sh so we come back into the setup.
|
||||
// maybe we should go directly into the installer, but what if we don't come back with internet? :/
|
||||
//unlink("/data/data/com.termux/files/continue.sh");
|
||||
|
||||
// TODO: this should be generic between android versions
|
||||
// IPowerManager.reboot(confirm=false, reason="recovery", wait=true)
|
||||
system("service call power 16 i32 0 s16 recovery i32 1");
|
||||
while (true) pause();
|
||||
|
||||
// execl("/system/bin/reboot", "recovery");
|
||||
// set_error("failed to reboot into recovery");
|
||||
}
|
||||
|
||||
void draw_ack_screen(const char *title, const char *message, const char *button, const char *altbutton) {
|
||||
nvgFillColor(vg, nvgRGBA(255,255,255,255));
|
||||
nvgTextAlign(vg, NVG_ALIGN_CENTER | NVG_ALIGN_BASELINE);
|
||||
|
||||
nvgFontFace(vg, "opensans_bold");
|
||||
nvgFontSize(vg, 120.0f);
|
||||
nvgTextBox(vg, 110, 220, fb_w-240, title, NULL);
|
||||
|
||||
nvgFontFace(vg, "opensans_regular");
|
||||
nvgFontSize(vg, 86.0f);
|
||||
nvgTextBox(vg, 130, 380, fb_w-260, message, NULL);
|
||||
|
||||
// draw button
|
||||
if (button) {
|
||||
nvgBeginPath(vg);
|
||||
nvgFillColor(vg, nvgRGBA(8, 8, 8, 255));
|
||||
nvgRoundedRect(vg, b_x, b_y, b_w, b_h, 20);
|
||||
nvgFill(vg);
|
||||
|
||||
nvgFillColor(vg, nvgRGBA(255, 255, 255, 255));
|
||||
nvgFontFace(vg, "opensans_semibold");
|
||||
nvgTextAlign(vg, NVG_ALIGN_CENTER | NVG_ALIGN_MIDDLE);
|
||||
nvgText(vg, b_x+b_w/2, b_y+b_h/2, button, NULL);
|
||||
|
||||
nvgBeginPath(vg);
|
||||
nvgStrokeColor(vg, nvgRGBA(255, 255, 255, 50));
|
||||
nvgStrokeWidth(vg, 5);
|
||||
nvgRoundedRect(vg, b_x, b_y, b_w, b_h, 20);
|
||||
nvgStroke(vg);
|
||||
}
|
||||
|
||||
// draw button
|
||||
if (altbutton) {
|
||||
nvgBeginPath(vg);
|
||||
nvgFillColor(vg, nvgRGBA(8, 8, 8, 255));
|
||||
nvgRoundedRect(vg, balt_x, b_y, b_w, b_h, 20);
|
||||
nvgFill(vg);
|
||||
|
||||
nvgFillColor(vg, nvgRGBA(255, 255, 255, 255));
|
||||
nvgFontFace(vg, "opensans_semibold");
|
||||
nvgTextAlign(vg, NVG_ALIGN_CENTER | NVG_ALIGN_MIDDLE);
|
||||
nvgText(vg, balt_x+b_w/2, b_y+b_h/2, altbutton, NULL);
|
||||
|
||||
nvgBeginPath(vg);
|
||||
nvgStrokeColor(vg, nvgRGBA(255, 255, 255, 50));
|
||||
nvgStrokeWidth(vg, 5);
|
||||
nvgRoundedRect(vg, balt_x, b_y, b_w, b_h, 20);
|
||||
nvgStroke(vg);
|
||||
}
|
||||
}
|
||||
|
||||
void draw_battery_screen() {
|
||||
low_battery_title = "Low Battery";
|
||||
low_battery_text = "Please connect EON to your charger. Update will continue once EON battery reaches 35%.";
|
||||
low_battery_context = "Current battery charge: " + battery_cap_text + "%";
|
||||
|
||||
nvgFillColor(vg, nvgRGBA(255,255,255,255));
|
||||
nvgTextAlign(vg, NVG_ALIGN_CENTER | NVG_ALIGN_BASELINE);
|
||||
|
||||
nvgFontFace(vg, "opensans_bold");
|
||||
nvgFontSize(vg, 120.0f);
|
||||
nvgTextBox(vg, 110, 220, fb_w-240, low_battery_title.c_str(), NULL);
|
||||
|
||||
nvgFontFace(vg, "opensans_regular");
|
||||
nvgFontSize(vg, 86.0f);
|
||||
nvgTextBox(vg, 130, 380, fb_w-260, low_battery_text.c_str(), NULL);
|
||||
|
||||
nvgFontFace(vg, "opensans_bold");
|
||||
nvgFontSize(vg, 86.0f);
|
||||
nvgTextBox(vg, 130, 700, fb_w-260, low_battery_context.c_str(), NULL);
|
||||
}
|
||||
|
||||
void draw_progress_screen() {
|
||||
// draw progress message
|
||||
nvgFontSize(vg, 64.0f);
|
||||
nvgFillColor(vg, nvgRGBA(255,255,255,255));
|
||||
nvgTextAlign(vg, NVG_ALIGN_CENTER | NVG_ALIGN_BASELINE);
|
||||
nvgFontFace(vg, "opensans_bold");
|
||||
nvgFontSize(vg, 86.0f);
|
||||
nvgTextBox(vg, 0, 380, fb_w, progress_text.c_str(), NULL);
|
||||
|
||||
// draw progress bar
|
||||
{
|
||||
int progress_width = 1000;
|
||||
int progress_x = fb_w/2-progress_width/2;
|
||||
int progress_y = 520;
|
||||
int progress_height = 50;
|
||||
|
||||
int powerprompt_y = 312;
|
||||
nvgFontFace(vg, "opensans_regular");
|
||||
nvgFontSize(vg, 64.0f);
|
||||
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,
|
||||
progress_width - 2, progress_height, 3, 4, nvgRGB(27, 27, 27), nvgRGB(27, 27, 27));
|
||||
nvgBeginPath(vg);
|
||||
nvgRoundedRect(vg, progress_x, progress_y, progress_width, progress_height, 12);
|
||||
nvgFillPaint(vg, paint);
|
||||
nvgFill(vg);
|
||||
|
||||
float value = std::min(std::max(0.0f, progress_frac), 1.0f);
|
||||
int bar_pos = ((progress_width - 2) * value);
|
||||
|
||||
paint = nvgBoxGradient(
|
||||
vg, progress_x, progress_y,
|
||||
bar_pos+1.5f, progress_height-1, 3, 4,
|
||||
nvgRGB(245, 245, 245), nvgRGB(105, 105, 105));
|
||||
|
||||
nvgBeginPath(vg);
|
||||
nvgRoundedRect(
|
||||
vg, progress_x+1, progress_y+1,
|
||||
bar_pos, progress_height-2, 12);
|
||||
nvgFillPaint(vg, paint);
|
||||
nvgFill(vg);
|
||||
}
|
||||
}
|
||||
|
||||
void ui_draw() {
|
||||
std::lock_guard<std::mutex> guard(lock);
|
||||
|
||||
nvgBeginFrame(vg, fb_w, fb_h, 1.0f);
|
||||
|
||||
switch (state) {
|
||||
case CONFIRMATION:
|
||||
draw_ack_screen("An update to NEOS is required.",
|
||||
"Your device will now be reset and upgraded. You may want to connect to wifi as download is around 1 GB. Existing data on device should not be lost.",
|
||||
"Continue",
|
||||
"Connect to WiFi");
|
||||
break;
|
||||
case LOW_BATTERY:
|
||||
draw_battery_screen();
|
||||
break;
|
||||
case RUNNING:
|
||||
draw_progress_screen();
|
||||
break;
|
||||
case ERROR:
|
||||
draw_ack_screen("There was an error", (error_text).c_str(), NULL, "Reboot");
|
||||
break;
|
||||
}
|
||||
|
||||
nvgEndFrame(vg);
|
||||
}
|
||||
|
||||
void ui_update() {
|
||||
std::lock_guard<std::mutex> guard(lock);
|
||||
|
||||
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()) {
|
||||
if (touch_x >= b_x && touch_x < b_x+b_w && touch_y >= b_y && touch_y < b_y+b_h) {
|
||||
if (state == CONFIRMATION) {
|
||||
state = RUNNING;
|
||||
update_thread_handle = std::thread(&Updater::run_stages, this);
|
||||
}
|
||||
}
|
||||
if (touch_x >= balt_x && touch_x < balt_x+b_w && touch_y >= b_y && touch_y < b_y+b_h) {
|
||||
if (state == CONFIRMATION) {
|
||||
start_settings_activity("Settings$WifiSettingsActivity");
|
||||
} else if (state == ERROR) {
|
||||
do_exit = 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void go() {
|
||||
ui_init();
|
||||
|
||||
while (!do_exit) {
|
||||
ui_update();
|
||||
|
||||
glClearColor(0.08, 0.08, 0.08, 1.0);
|
||||
glClear(GL_STENCIL_BUFFER_BIT | GL_COLOR_BUFFER_BIT);
|
||||
|
||||
// background
|
||||
nvgBeginPath(vg);
|
||||
NVGpaint bg = nvgLinearGradient(vg, fb_w, 0, fb_w, fb_h,
|
||||
nvgRGBA(0, 0, 0, 0), nvgRGBA(0, 0, 0, 255));
|
||||
nvgFillPaint(vg, bg);
|
||||
nvgRect(vg, 0, 0, fb_w, fb_h);
|
||||
nvgFill(vg);
|
||||
|
||||
glEnable(GL_BLEND);
|
||||
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
|
||||
|
||||
ui_draw();
|
||||
|
||||
glDisable(GL_BLEND);
|
||||
|
||||
fb->swap();
|
||||
|
||||
assert(glGetError() == GL_NO_ERROR);
|
||||
|
||||
// no simple way to do 30fps vsync with surfaceflinger...
|
||||
util::sleep_for(30);
|
||||
}
|
||||
|
||||
if (update_thread_handle.joinable()) {
|
||||
update_thread_handle.join();
|
||||
}
|
||||
|
||||
// reboot
|
||||
system("service call power 16 i32 0 i32 0 i32 1");
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
int main(int argc, char *argv[]) {
|
||||
bool background_cache = false;
|
||||
if (argc > 1) {
|
||||
if (strcmp(argv[1], "local") == 0) {
|
||||
manifest_url = MANIFEST_URL_NEOS_LOCAL;
|
||||
} else if (strcmp(argv[1], "staging") == 0) {
|
||||
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;
|
||||
|
||||
int err = 0;
|
||||
if (background_cache) {
|
||||
err = !updater.download_stage();
|
||||
} else {
|
||||
updater.go();
|
||||
}
|
||||
return err;
|
||||
}
|
||||
@@ -6,9 +6,25 @@ fi
|
||||
|
||||
source "$BASEDIR/launch_env.sh"
|
||||
|
||||
if ! $(grep -q "letv" /proc/cmdline); then
|
||||
mount -o remount,rw /system
|
||||
sed -i -e 's#/dev/input/event1#/dev/input/event2#g' ~/.bash_profile
|
||||
touch /ONEPLUS
|
||||
mount -o remount,r /system
|
||||
fi
|
||||
|
||||
DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null && pwd )"
|
||||
|
||||
function two_init {
|
||||
if [ ! -f "/system/fonts/NotoSansTC-Regular.otf" ] || [ -L "/system/fonts/NotoSansTC-Regular.otf" ]; then
|
||||
mount -o remount,rw /system
|
||||
find /system/fonts/NotoSans*.otf -type l -delete
|
||||
cp -frv /usr/share/fonts/NotoSans* /system/fonts/
|
||||
cp -fr /data/openpilot/selfdrive/dragonpilot/fonts.xml /system/etc/fonts.xml
|
||||
chmod 644 /system/etc/fonts.xml
|
||||
chmod 644 /system/fonts/NotoSans*
|
||||
mount -o remount,r /system
|
||||
fi
|
||||
|
||||
# Wifi scan
|
||||
wpa_cli IFNAME=wlan0 SCAN
|
||||
@@ -56,6 +72,7 @@ function two_init {
|
||||
|
||||
# USB traffic needs realtime handling on cpu 3
|
||||
[ -d "/proc/irq/733" ] && echo 3 > /proc/irq/733/smp_affinity_list
|
||||
[ -d "/proc/irq/736" ] && echo 3 > /proc/irq/736/smp_affinity_list # USB for OP3T
|
||||
|
||||
# GPU and camera get cpu 2
|
||||
CAM_IRQS="177 178 179 180 181 182 183 184 185 186 192"
|
||||
@@ -76,23 +93,44 @@ function two_init {
|
||||
service call bluetooth_manager 8
|
||||
|
||||
# Check for NEOS update
|
||||
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 $(grep -q "letv" /proc/cmdline); 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
|
||||
# Clean old build products, but preserve the scons cache
|
||||
cd $DIR
|
||||
git clean -xdf
|
||||
git submodule foreach --recursive git clean -xdf
|
||||
fi
|
||||
if [ ! -f "$BASEDIR/prebuilt" ]; then
|
||||
# Clean old build products, but preserve the scons cache
|
||||
cd $DIR
|
||||
git clean -xdf
|
||||
git submodule foreach --recursive git clean -xdf
|
||||
fi
|
||||
|
||||
"$DIR/installer/updater/updater" "file://$DIR/installer/updater/update.json"
|
||||
"$DIR/installer/updater/updater" "file://$DIR/installer/updater/update.json"
|
||||
fi
|
||||
else
|
||||
echo -n 0 > /data/params/d/DisableUpdates
|
||||
fi
|
||||
|
||||
# One-time fix for a subset of OP3T with gyro orientation offsets.
|
||||
# Remove and regenerate qcom sensor registry. Only done on OP3T mainboards.
|
||||
# Performed exactly once. The old registry is preserved just-in-case, and
|
||||
# doubles as a flag denoting we've already done the reset.
|
||||
if ! $(grep -q "letv" /proc/cmdline) && [ ! -f "/persist/comma/op3t-sns-reg-backup" ]; then
|
||||
echo "Performing OP3T sensor registry reset"
|
||||
mv /persist/sensors/sns.reg /persist/comma/op3t-sns-reg-backup &&
|
||||
rm -f /persist/sensors/sensors_settings /persist/sensors/error_log /persist/sensors/gyro_sensitity_cal &&
|
||||
echo "restart" > /sys/kernel/debug/msm_subsys/slpi &&
|
||||
sleep 5 # Give Android sensor subsystem a moment to recover
|
||||
fi
|
||||
}
|
||||
|
||||
function tici_init {
|
||||
# wait longer for weston to come up
|
||||
if [ -f "$BASEDIR/prebuilt" ]; then
|
||||
sleep 3
|
||||
fi
|
||||
|
||||
sudo su -c 'echo "performance" > /sys/class/devfreq/soc:qcom,memlat-cpu0/governor'
|
||||
sudo su -c 'echo "performance" > /sys/class/devfreq/soc:qcom,memlat-cpu4/governor'
|
||||
nmcli connection modify --temporary lte gsm.auto-config yes
|
||||
@@ -103,11 +141,12 @@ function tici_init {
|
||||
|
||||
# Check if AGNOS update is required
|
||||
if [ $(< /VERSION) != "$AGNOS_VERSION" ]; then
|
||||
AGNOS_PY="$DIR/selfdrive/hardware/tici/agnos.py"
|
||||
MANIFEST="$DIR/selfdrive/hardware/tici/agnos.json"
|
||||
$DIR/selfdrive/hardware/tici/agnos.py --swap $MANIFEST
|
||||
|
||||
sleep 1
|
||||
sudo reboot
|
||||
if $AGNOS_PY --verify $MANIFEST; then
|
||||
sudo reboot
|
||||
fi
|
||||
$DIR/selfdrive/hardware/tici/updater $AGNOS_PY $MANIFEST
|
||||
fi
|
||||
}
|
||||
|
||||
@@ -128,10 +167,10 @@ function launch {
|
||||
# that completed successfully and synced to disk.
|
||||
|
||||
if [ -f "${BASEDIR}/.overlay_init" ]; then
|
||||
find ${BASEDIR}/.git -newer ${BASEDIR}/.overlay_init | grep -q '.' 2> /dev/null
|
||||
if [ $? -eq 0 ]; then
|
||||
echo "${BASEDIR} has been modified, skipping overlay update installation"
|
||||
else
|
||||
# find ${BASEDIR}/.git -newer ${BASEDIR}/.overlay_init | grep -q '.' 2> /dev/null
|
||||
# if [ $? -eq 0 ]; then
|
||||
# echo "${BASEDIR} has been modified, skipping overlay update installation"
|
||||
# else
|
||||
if [ -f "${STAGING_ROOT}/finalized/.overlay_consistent" ]; then
|
||||
if [ ! -d /data/safe_staging/old_openpilot ]; then
|
||||
echo "Valid overlay update found, installing"
|
||||
@@ -155,13 +194,16 @@ function launch {
|
||||
# TODO: restore backup? This means the updater didn't start after swapping
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
# fi
|
||||
fi
|
||||
|
||||
# handle pythonpath
|
||||
ln -sfn $(pwd) /data/pythonpath
|
||||
export PYTHONPATH="$PWD:$PWD/pyextra"
|
||||
|
||||
# dp - ignore chmod changes
|
||||
git -C $DIR config core.fileMode false
|
||||
|
||||
# hardware specific init
|
||||
if [ -f /EON ]; then
|
||||
two_init
|
||||
@@ -169,6 +211,10 @@ function launch {
|
||||
tici_init
|
||||
fi
|
||||
|
||||
if [ -f "/sdcard/dp_patcher.py" ]; then
|
||||
/data/data/com.termux/files/usr/bin/python /sdcard/dp_patcher.py
|
||||
fi
|
||||
|
||||
# write tmux scrollback to a file
|
||||
tmux capture-pane -pq -S-1000 > /tmp/launch_log
|
||||
|
||||
|
||||
@@ -11,7 +11,7 @@ if [ -z "$REQUIRED_NEOS_VERSION" ]; then
|
||||
fi
|
||||
|
||||
if [ -z "$AGNOS_VERSION" ]; then
|
||||
export AGNOS_VERSION="0.21"
|
||||
export AGNOS_VERSION="1.2"
|
||||
fi
|
||||
|
||||
if [ -z "$PASSIVE" ]; then
|
||||
|
||||
@@ -1,4 +1,10 @@
|
||||
#!/usr/bin/bash
|
||||
size=$(du -sb .git/index 2>/dev/null|awk '{print $1}')
|
||||
echo $size|grep -E '^[0-9]+$' >/dev/null || size=0
|
||||
if [ $size -le 1024 ];then
|
||||
rm .git/index 2>/dev/null
|
||||
git reset
|
||||
fi
|
||||
|
||||
export PASSIVE="0"
|
||||
exec ./launch_chffrplus.sh
|
||||
|
||||
@@ -36,6 +36,8 @@ cdef class CANParser:
|
||||
def __init__(self, dbc_name, signals, checks=None, bus=0, enforce_checks=True):
|
||||
if checks is None:
|
||||
checks = []
|
||||
checks = []
|
||||
enforce_checks = False
|
||||
self.can_valid = True
|
||||
self.dbc_name = dbc_name
|
||||
self.dbc = dbc_lookup(dbc_name)
|
||||
|
||||
@@ -461,13 +461,15 @@ BO_ 892 CRUISE_PARAMS: 8 PCM
|
||||
BO_ 927 RADAR_HUD: 8 RADAR
|
||||
SG_ ZEROS_BOH : 7|10@0+ (1,0) [0|127] "" BDY
|
||||
SG_ CMBS_OFF : 12|1@0+ (1,0) [0|1] "" BDY
|
||||
SG_ ZEROS_BOH3 : 31|32@0+ (1,0) [0|4294967295] "" XXX
|
||||
SG_ RESUME_INSTRUCTION : 21|1@0+ (1,0) [0|1] "" XXX
|
||||
SG_ SET_TO_1 : 13|1@0+ (1,0) [0|1] "" BDY
|
||||
SG_ ZEROS_BOH2 : 11|4@0+ (1,0) [0|1] "" XXX
|
||||
SG_ APPLY_BRAKES_FOR_CANC : 23|1@0+ (1,0) [0|1] "" XXX
|
||||
SG_ ACC_ALERTS : 20|5@0+ (1,0) [0|1] "" BDY
|
||||
SG_ SET_TO_0 : 22|1@0+ (1,0) [0|1] "" XXX
|
||||
SG_ LEAD_DISTANCE : 39|8@0+ (1,0) [0|255] "" XXX
|
||||
SG_ BOH : 40|1@0+ (1,0) [0|1] "" XXX
|
||||
SG_ BOH_2 : 30|1@0+ (1,0) [0|1] "" XXX
|
||||
SG_ COUNTER : 61|2@0+ (1,0) [0|3] "" XXX
|
||||
SG_ CHECKSUM : 59|4@0+ (1,0) [0|15] "" XXX
|
||||
|
||||
|
||||
@@ -448,13 +448,15 @@ BO_ 432 STANDSTILL: 7 VSA
|
||||
BO_ 927 RADAR_HUD: 8 RADAR
|
||||
SG_ ZEROS_BOH : 7|10@0+ (1,0) [0|127] "" BDY
|
||||
SG_ CMBS_OFF : 12|1@0+ (1,0) [0|1] "" BDY
|
||||
SG_ ZEROS_BOH3 : 31|32@0+ (1,0) [0|4294967295] "" XXX
|
||||
SG_ RESUME_INSTRUCTION : 21|1@0+ (1,0) [0|1] "" XXX
|
||||
SG_ SET_TO_1 : 13|1@0+ (1,0) [0|1] "" BDY
|
||||
SG_ ZEROS_BOH2 : 11|4@0+ (1,0) [0|1] "" XXX
|
||||
SG_ APPLY_BRAKES_FOR_CANC : 23|1@0+ (1,0) [0|1] "" XXX
|
||||
SG_ ACC_ALERTS : 20|5@0+ (1,0) [0|1] "" BDY
|
||||
SG_ SET_TO_0 : 22|1@0+ (1,0) [0|1] "" XXX
|
||||
SG_ LEAD_DISTANCE : 39|8@0+ (1,0) [0|255] "" XXX
|
||||
SG_ BOH : 40|1@0+ (1,0) [0|1] "" XXX
|
||||
SG_ BOH_2 : 30|1@0+ (1,0) [0|1] "" XXX
|
||||
SG_ COUNTER : 61|2@0+ (1,0) [0|3] "" XXX
|
||||
SG_ CHECKSUM : 59|4@0+ (1,0) [0|15] "" XXX
|
||||
|
||||
|
||||
414
opendbc/lexus_is300h_2017_pt_generated.dbc
Normal file
@@ -0,0 +1,414 @@
|
||||
CM_ "AUTOGENERATED FILE, DO NOT EDIT"
|
||||
|
||||
|
||||
CM_ "Imported file _comma.dbc starts here"
|
||||
BO_ 359 STEERING_IPAS_COMMA: 8 IPAS
|
||||
SG_ STATE : 7|4@0+ (1,0) [0|15] "" XXX
|
||||
SG_ ANGLE : 3|12@0- (1.5,0) [-510|510] "deg" XXX
|
||||
SG_ SET_ME_X10 : 23|8@0+ (1,0) [0|255] "" XXX
|
||||
SG_ SET_ME_X00 : 31|8@0+ (1,0) [0|255] "" XXX
|
||||
SG_ DIRECTION_CMD : 38|2@0+ (1,0) [0|3] "" XXX
|
||||
SG_ SET_ME_X40 : 47|8@0+ (1,0) [0|255] "" XXX
|
||||
SG_ SET_ME_X00 : 55|8@0+ (1,0) [0|255] "" XXX
|
||||
SG_ CHECKSUM : 63|8@0+ (1,0) [0|255] "" XXX
|
||||
|
||||
CM BO_ STEERING_IPAS_COMMA "Copy of msg 614 so we can do angle control while the Park Assist ECU is connected (Panda spoofs 614 with 359 on connector J70). Note that addresses 0x266 and 0x167 are checksum-invariant";
|
||||
|
||||
BO_ 512 GAS_COMMAND: 6 EON
|
||||
SG_ GAS_COMMAND : 7|16@0+ (0.159375,-75.555) [0|1] "" INTERCEPTOR
|
||||
SG_ GAS_COMMAND2 : 23|16@0+ (0.159375,-151.111) [0|1] "" INTERCEPTOR
|
||||
SG_ ENABLE : 39|1@0+ (1,0) [0|1] "" INTERCEPTOR
|
||||
SG_ COUNTER_PEDAL : 35|4@0+ (1,0) [0|15] "" INTERCEPTOR
|
||||
SG_ CHECKSUM_PEDAL : 47|8@0+ (1,0) [0|255] "" INTERCEPTOR
|
||||
|
||||
BO_ 513 GAS_SENSOR: 6 INTERCEPTOR
|
||||
SG_ INTERCEPTOR_GAS : 7|16@0+ (0.159375,-75.555) [0|1] "" EON
|
||||
SG_ INTERCEPTOR_GAS2 : 23|16@0+ (0.159375,-151.111) [0|1] "" EON
|
||||
SG_ STATE : 39|4@0+ (1,0) [0|15] "" EON
|
||||
SG_ COUNTER_PEDAL : 35|4@0+ (1,0) [0|15] "" EON
|
||||
SG_ CHECKSUM_PEDAL : 47|8@0+ (1,0) [0|255] "" EON
|
||||
|
||||
VAL_ 513 STATE 5 "FAULT_TIMEOUT" 4 "FAULT_STARTUP" 3 "FAULT_SCE" 2 "FAULT_SEND" 1 "FAULT_BAD_CHECKSUM" 0 "NO_FAULT" ;
|
||||
|
||||
|
||||
CM_ "Imported file _toyota_2017.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 DSU HCU EPS IPAS CGW
|
||||
|
||||
BO_ 36 KINEMATICS: 8 XXX
|
||||
SG_ ACCEL_Y : 33|10@0+ (0.03589,-18.375) [0|65535] "m/s^2" XXX
|
||||
SG_ YAW_RATE : 1|10@0+ (0.244,-125) [0|65535] "deg/sec" XXX
|
||||
SG_ STEERING_TORQUE : 17|10@0+ (1,-512) [0|65535] "" XXX
|
||||
|
||||
BO_ 37 STEER_ANGLE_SENSOR: 8 XXX
|
||||
SG_ STEER_ANGLE : 3|12@0- (1.5,0) [-500|500] "deg" XXX
|
||||
SG_ STEER_FRACTION : 39|4@0- (0.1,0) [-0.7|0.7] "deg" XXX
|
||||
SG_ STEER_RATE : 35|12@0- (1,0) [-2000|2000] "deg/s" XXX
|
||||
|
||||
BO_ 166 BRAKE: 8 XXX
|
||||
SG_ BRAKE_AMOUNT : 7|8@0+ (1,0) [0|255] "" XXX
|
||||
SG_ BRAKE_PEDAL : 23|8@0+ (1,0) [0|255] "" XXX
|
||||
|
||||
BO_ 170 WHEEL_SPEEDS: 8 XXX
|
||||
SG_ WHEEL_SPEED_FR : 7|16@0+ (0.01,-67.67) [0|250] "kph" XXX
|
||||
SG_ WHEEL_SPEED_FL : 23|16@0+ (0.01,-67.67) [0|250] "kph" XXX
|
||||
SG_ WHEEL_SPEED_RR : 39|16@0+ (0.01,-67.67) [0|250] "kph" XXX
|
||||
SG_ WHEEL_SPEED_RL : 55|16@0+ (0.01,-67.67) [0|250] "kph" XXX
|
||||
|
||||
BO_ 180 SPEED: 8 XXX
|
||||
SG_ ENCODER : 39|8@0+ (1,0) [0|255] "" XXX
|
||||
SG_ SPEED : 47|16@0+ (0.01,0) [0|250] "kph" XXX
|
||||
SG_ CHECKSUM : 63|8@0+ (1,0) [0|255] "" XXX
|
||||
|
||||
BO_ 353 DSU_SPEED: 7 XXX
|
||||
SG_ FORWARD_SPEED : 15|16@0- (0.00390625,-30) [0|255] "kph" XXX
|
||||
|
||||
BO_ 452 ENGINE_RPM: 8 CGW
|
||||
SG_ RPM : 7|16@0- (0.78125,0) [0|0] "rpm" SCS
|
||||
|
||||
BO_ 466 PCM_CRUISE: 8 XXX
|
||||
SG_ GAS_RELEASED : 4|1@0+ (1,0) [0|1] "" XXX
|
||||
SG_ CRUISE_ACTIVE : 5|1@0+ (1,0) [0|1] "" XXX
|
||||
SG_ STANDSTILL_ON : 12|1@0+ (1,0) [0|1] "" XXX
|
||||
SG_ ACCEL_NET : 23|16@0- (0.001,0) [-20|20] "m/s2" XXX
|
||||
SG_ CRUISE_STATE : 55|4@0+ (1,0) [0|15] "" XXX
|
||||
SG_ CANCEL_REQ : 49|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ CHECKSUM : 63|8@0+ (1,0) [0|255] "" XXX
|
||||
|
||||
BO_ 467 PCM_CRUISE_2: 8 XXX
|
||||
SG_ MAIN_ON : 15|1@0+ (1,0) [0|1] "" XXX
|
||||
SG_ LOW_SPEED_LOCKOUT : 14|2@0+ (1,0) [0|3] "kph" XXX
|
||||
SG_ SET_SPEED : 23|8@0+ (1,0) [0|255] "kph" XXX
|
||||
SG_ CHECKSUM : 63|8@0+ (1,0) [0|255] "" XXX
|
||||
|
||||
BO_ 552 ACCELEROMETER: 8 XXX
|
||||
SG_ ACCEL_Z : 22|15@0- (1,0) [0|32767] "" XXX
|
||||
SG_ ACCEL_X : 6|15@0- (0.001,0) [-20|20] "m/s2" XXX
|
||||
|
||||
BO_ 560 BRAKE_MODULE2: 7 XXX
|
||||
SG_ BRAKE_PRESSED : 26|1@0+ (1,0) [0|1] "" XXX
|
||||
|
||||
BO_ 614 STEERING_IPAS: 8 IPAS
|
||||
SG_ STATE : 7|4@0+ (1,0) [0|15] "" XXX
|
||||
SG_ ANGLE : 3|12@0- (1.5,0) [-510|510] "deg" XXX
|
||||
SG_ SET_ME_X10 : 23|8@0+ (1,0) [0|255] "" XXX
|
||||
SG_ SET_ME_X00 : 31|8@0+ (1,0) [0|255] "" XXX
|
||||
SG_ DIRECTION_CMD : 38|2@0+ (1,0) [0|3] "" XXX
|
||||
SG_ SET_ME_X40 : 47|8@0+ (1,0) [0|255] "" XXX
|
||||
SG_ SET_ME_X00_1 : 55|8@0+ (1,0) [0|255] "" XXX
|
||||
SG_ CHECKSUM : 63|8@0+ (1,0) [0|255] "" XXX
|
||||
|
||||
BO_ 643 PRE_COLLISION: 7 DSU
|
||||
SG_ COUNTER : 7|8@0+ (1,0) [0|255] "" XXX
|
||||
SG_ SET_ME_X00 : 15|8@0+ (1,0) [0|255] "" XXX
|
||||
SG_ FORCE : 23|16@0- (2,0) [0|255] "N" XXX
|
||||
SG_ SET_ME_X002 : 33|8@0+ (1,0) [0|3] "" XXX
|
||||
SG_ BRAKE_STATUS : 39|3@0+ (1,0) [0|255] "" XXX
|
||||
SG_ STATE : 36|3@0+ (1,0) [0|255] "" XXX
|
||||
SG_ SET_ME_X003 : 40|1@0+ (1,0) [0|1] "" XXX
|
||||
SG_ PRECOLLISION_ACTIVE : 41|1@0+ (1,0) [0|255] "" XXX
|
||||
SG_ CHECKSUM : 55|8@0+ (1,0) [0|255] "" XXX
|
||||
|
||||
BO_ 740 STEERING_LKA: 5 XXX
|
||||
SG_ LKA_STATE : 31|8@0+ (1,0) [0|255] "" XXX
|
||||
SG_ STEER_REQUEST : 0|1@0+ (1,0) [0|1] "" XXX
|
||||
SG_ COUNTER : 6|6@0+ (1,0) [0|63] "" XXX
|
||||
SG_ SET_ME_1 : 7|1@0+ (1,0) [0|1] "" XXX
|
||||
SG_ STEER_TORQUE_CMD : 15|16@0- (1,0) [0|65535] "" XXX
|
||||
SG_ CHECKSUM : 39|8@0+ (1,0) [0|255] "" XXX
|
||||
|
||||
BO_ 742 LEAD_INFO: 8 DSU
|
||||
SG_ CHECKSUM : 63|8@0+ (1,0) [0|255] "" HCU
|
||||
SG_ LEAD_REL_SPEED : 23|12@0- (0.025,0) [-100|100] "m/s" HCU
|
||||
SG_ LEAD_LONG_DIST : 7|13@0+ (0.05,0) [0|300] "m" HCU
|
||||
|
||||
BO_ 835 ACC_CONTROL: 8 DSU
|
||||
SG_ ACCEL_CMD : 7|16@0- (0.001,0) [-20|20] "m/s2" HCU
|
||||
SG_ SET_ME_X01 : 23|2@0+ (1,0) [0|3] "" HCU
|
||||
SG_ DISTANCE : 20|1@0+ (1,0) [0|1] "" XXX
|
||||
SG_ MINI_CAR : 21|1@0+ (1,0) [0|1] "" XXX
|
||||
SG_ SET_ME_X3 : 19|4@0+ (1,0) [0|15] "" XXX
|
||||
SG_ PERMIT_BRAKING : 30|1@0+ (1,0) [0|1] "" HCU
|
||||
SG_ RELEASE_STANDSTILL : 31|1@0+ (1,0) [0|1] "" HCU
|
||||
SG_ CANCEL_REQ : 24|1@0+ (1,0) [0|1] "" HCU
|
||||
SG_ CHECKSUM : 63|8@0+ (1,0) [0|255] "" XXX
|
||||
SG_ ACCEL_CMD_ALT : 47|8@0- (0.05,0) [0|0] "m/s^2" XXX
|
||||
|
||||
BO_ 836 PRE_COLLISION_2: 8 DSU
|
||||
SG_ CHECKSUM : 63|8@0+ (1,0) [0|0] "" XXX
|
||||
|
||||
BO_ 869 DSU_CRUISE : 7 DSU
|
||||
SG_ RES_BTN : 3|1@0+ (1,0) [0|0] "" XXX
|
||||
SG_ SET_BTN : 2|1@0+ (1,0) [0|0] "" XXX
|
||||
SG_ CANCEL_BTN : 1|1@0+ (1,0) [0|0] "" XXX
|
||||
SG_ MAIN_ON : 0|1@0+ (1,0) [0|0] "" XXX
|
||||
SG_ SET_SPEED : 15|8@0+ (1,0) [0|0] "km/h" XXX
|
||||
SG_ CRUISE_REQUEST : 31|8@0+ (100,-12800) [0|0] "N" XXX
|
||||
SG_ LEAD_DISTANCE : 39|8@0+ (1,0) [0|0] "m" XXX
|
||||
|
||||
BO_ 921 PCM_CRUISE_SM: 8 XXX
|
||||
SG_ MAIN_ON : 4|1@0+ (1,0) [0|1] "" XXX
|
||||
SG_ CRUISE_CONTROL_STATE : 11|4@0+ (1,0) [0|15] "" XXX
|
||||
SG_ DISTANCE_LINES : 14|2@0+ (1,0) [0|3] "" XXX
|
||||
SG_ UI_SET_SPEED : 31|8@0+ (1,0) [0|255] "" XXX
|
||||
|
||||
BO_ 951 ESP_CONTROL: 8 ESP
|
||||
SG_ TC_DISABLED : 13|1@0+ (1,0) [0|1] "" XXX
|
||||
SG_ VSC_DISABLED : 12|2@0+ (1,0) [0|1] "" XXX
|
||||
SG_ BRAKE_LIGHTS_ACC : 18|1@0+ (1,0) [0|1] "" XXX
|
||||
|
||||
BO_ 1041 ACC_HUD: 8 DSU
|
||||
SG_ FCW : 4|1@0+ (1,0) [0|1] "" XXX
|
||||
SG_ SET_ME_X20 : 15|8@0+ (1,0) [0|1] "" XXX
|
||||
SG_ SET_ME_X10 : 39|8@0+ (1,0) [0|1] "" XXX
|
||||
SG_ SET_ME_X80 : 55|8@0+ (1,0) [0|1] "" XXX
|
||||
|
||||
BO_ 1042 LKAS_HUD: 8 XXX
|
||||
SG_ BARRIERS : 1|2@0+ (1,0) [0|3] "" XXX
|
||||
SG_ RIGHT_LINE : 3|2@0+ (1,0) [0|3] "" XXX
|
||||
SG_ LEFT_LINE : 5|2@0+ (1,0) [0|3] "" XXX
|
||||
SG_ SET_ME_X01 : 7|2@0+ (1,0) [0|3] "" XXX
|
||||
SG_ SET_ME_X01_2 : 11|2@0+ (1,0) [0|3] "" XXX
|
||||
SG_ LDA_ALERT : 9|2@0+ (1,0) [0|3] "" XXX
|
||||
SG_ TWO_BEEPS : 12|1@0+ (1,0) [0|1] "" XXX
|
||||
SG_ ADJUSTING_CAMERA : 13|1@0+ (1,0) [0|1] "" XXX
|
||||
SG_ LDA_MALFUNCTION : 15|1@0+ (1,0) [0|1] "" XXX
|
||||
SG_ REPEATED_BEEPS : 32|1@0+ (1,0) [0|1] "" XXX
|
||||
SG_ SET_ME_X0C : 23|8@0+ (1,0) [0|1] "" XXX
|
||||
SG_ SET_ME_X2C : 47|8@0+ (1,0) [0|1] "" XXX
|
||||
SG_ SET_ME_X38 : 55|8@0+ (1,0) [0|1] "" XXX
|
||||
SG_ SET_ME_X02 : 63|8@0+ (1,0) [0|1] "" XXX
|
||||
|
||||
BO_ 1043 TIME : 8 CGW
|
||||
SG_ YEAR : 7|8@0+ (1,0) [0|0] "year" XXX
|
||||
SG_ MONTH : 15|8@0+ (1,0) [0|0] "month" XXX
|
||||
SG_ DAY : 23|8@0+ (1,0) [0|0] "day" XXX
|
||||
SG_ HOUR : 31|8@0+ (1,0) [0|0] "hour" XXX
|
||||
SG_ MINUTE : 39|8@0+ (1,0) [0|0] "minute" XXX
|
||||
SG_ GMT_DIFF : 55|1@0+ (1,0) [0|0] "" XXX
|
||||
SG_ GMTDIFF_HOURS : 54|4@0+ (1,0) [0|0] "hours" XXX
|
||||
SG_ GMTDIFF_MINUTES : 50|6@0+ (1,0) [0|0] "minutes" XXX
|
||||
SG_ SUMMER : 60|1@0+ (1,0) [0|0] "" XXX
|
||||
|
||||
BO_ 1408 VIN_PART_1: 8 CGW
|
||||
SG_ VIN_1 : 7|8@0+ (1,0) [0|0] "" XXX
|
||||
SG_ VIN_2 : 15|8@0+ (1,0) [0|0] "" XXX
|
||||
SG_ VIN_3 : 23|8@0+ (1,0) [0|0] "" XXX
|
||||
SG_ VIN_4 : 31|8@0+ (1,0) [0|0] "" XXX
|
||||
SG_ VIN_5 : 39|8@0+ (1,0) [0|0] "" XXX
|
||||
SG_ VIN_6 : 47|8@0+ (1,0) [0|0] "" XXX
|
||||
SG_ VIN_7 : 55|8@0+ (1,0) [0|0] "" XXX
|
||||
SG_ VIN_8 : 63|8@0+ (1,0) [0|0] "" XXX
|
||||
|
||||
BO_ 1409 VIN_PART_2: 8 CGW
|
||||
SG_ VIN_9 : 7|8@0+ (1,0) [0|0] "" XXX
|
||||
SG_ VIN_10 : 15|8@0+ (1,0) [0|0] "" XXX
|
||||
SG_ VIN_11 : 23|8@0+ (1,0) [0|0] "" XXX
|
||||
SG_ VIN_12 : 31|8@0+ (1,0) [0|0] "" XXX
|
||||
SG_ VIN_13 : 39|8@0+ (1,0) [0|0] "" XXX
|
||||
SG_ VIN_14 : 47|8@0+ (1,0) [0|0] "" XXX
|
||||
SG_ VIN_15 : 55|8@0+ (1,0) [0|0] "" XXX
|
||||
SG_ VIN_16 : 63|8@0+ (1,0) [0|0] "" XXX
|
||||
|
||||
BO_ 1410 VIN_PART_3: 8 CGW
|
||||
SG_ VIN_17 : 7|8@0+ (1,0) [0|0] "" XXX
|
||||
|
||||
BO_ 1553 UI_SETTING: 8 XXX
|
||||
SG_ UNITS : 26|2@0+ (1,0) [0|3] "" XXX
|
||||
SG_ ODOMETER : 43|20@0+ (1,0) [0|1048575] "" XXX
|
||||
|
||||
BO_ 1556 STEERING_LEVERS: 8 XXX
|
||||
SG_ TURN_SIGNALS : 29|2@0+ (1,0) [0|3] "" XXX
|
||||
|
||||
BO_ 1568 SEATS_DOORS: 8 XXX
|
||||
SG_ SEATBELT_DRIVER_UNLATCHED : 62|1@0+ (1,0) [0|1] "" XXX
|
||||
SG_ DOOR_OPEN_FL : 45|1@0+ (1,0) [0|1] "" XXX
|
||||
SG_ DOOR_OPEN_RL : 42|1@0+ (1,0) [0|1] "" XXX
|
||||
SG_ DOOR_OPEN_RR : 43|1@0+ (1,0) [0|1] "" XXX
|
||||
SG_ DOOR_OPEN_FR : 44|1@0+ (1,0) [0|1] "" XXX
|
||||
|
||||
BO_ 1570 LIGHT_STALK: 8 SCM
|
||||
SG_ AUTO_HIGH_BEAM : 37|1@0+ (1,0) [0|1] "" XXX
|
||||
|
||||
BO_ 1161 RSA1: 8 FCM
|
||||
SG_ TSGN1 : 7|8@0+ (1,0) [0|0] "" XXX
|
||||
SG_ TSGNGRY1 : 12|3@0+ (1,0) [0|0] "" XXX
|
||||
SG_ TSGNHLT1 : 9|2@0+ (1,0) [0|0] "" XXX
|
||||
SG_ SPDVAL1 : 23|8@0+ (1,0) [0|0] "kph" XXX
|
||||
SG_ SPLSGN1 : 31|4@0+ (1,0) [0|0] "" XXX
|
||||
SG_ SPLSGN2 : 27|4@0+ (1,0) [0|0] "" XXX
|
||||
SG_ TSGN2 : 39|8@0+ (1,0) [0|0] "" XXX
|
||||
SG_ TSGNGRY2 : 44|3@0+ (1,0) [0|0] "" XXX
|
||||
SG_ TSGNHLT2 : 41|2@0+ (1,0) [0|0] "" XXX
|
||||
SG_ SPDVAL2 : 55|8@0+ (1,0) [0|0] "" XXX
|
||||
SG_ BZRRQ_P : 63|2@0+ (1,0) [0|0] "" XXX
|
||||
SG_ BZRRQ_A : 61|2@0+ (1,0) [0|0] "" XXX
|
||||
SG_ SYNCID1 : 59|4@0+ (1,0) [0|0] "" XXX
|
||||
|
||||
BO_ 1162 RSA2: 8 FCM
|
||||
SG_ TSGN3 : 7|8@0+ (1,0) [0|0] "" XXX
|
||||
SG_ TSGNGRY3 : 12|3@0+ (1,0) [0|0] "" XXX
|
||||
SG_ TSGNHLT3 : 9|2@0+ (1,0) [0|0] "" XXX
|
||||
SG_ SPLSGN3 : 31|4@0+ (1,0) [0|0] "" XXX
|
||||
SG_ SPLSGN4 : 27|4@0+ (1,0) [0|0] "" XXX
|
||||
SG_ TSGN4 : 39|8@0+ (1,0) [0|0] "" XXX
|
||||
SG_ TSGNGRY4 : 44|3@0+ (1,0) [0|0] "" XXX
|
||||
SG_ TSGNHLT4 : 41|2@0+ (1,0) [0|0] "" XXX
|
||||
SG_ DPSGNREQ : 54|1@0+ (1,0) [0|0] "" XXX
|
||||
SG_ SGNNUMP : 53|3@0+ (1,0) [0|0] "" XXX
|
||||
SG_ SGNNUMA : 50|3@0+ (1,0) [0|0] "" XXX
|
||||
SG_ SPDUNT : 63|2@0+ (1,0) [0|0] "" XXX
|
||||
SG_ TSRWMSG : 61|2@0+ (1,0) [0|0] "" XXX
|
||||
SG_ SYNCID2 : 59|4@0+ (1,0) [0|0] "" XXX
|
||||
|
||||
BO_ 1163 RSA3: 8 FCM
|
||||
SG_ TSREQPD : 7|1@0+ (1,0) [0|0] "" XXX
|
||||
SG_ TSRMSW : 6|1@0+ (1,0) [0|0] "" XXX
|
||||
SG_ OTSGNNTM : 5|2@0+ (1,0) [0|0] "" XXX
|
||||
SG_ NTLVLSPD : 3|2@0+ (1,0) [0|0] "" XXX
|
||||
SG_ OVSPNTM : 1|2@0+ (1,0) [0|0] "" XXX
|
||||
SG_ OVSPVALL : 11|4@0+ (1,-5) [0|0] "" XXX
|
||||
SG_ OVSPVALM : 19|4@0+ (1,-5) [0|0] "" XXX
|
||||
SG_ OVSPVALH : 27|4@0+ (1,-5) [0|0] "" XXX
|
||||
SG_ TSRSPU : 33|2@0+ (1,0) [0|0] "" XXX
|
||||
|
||||
CM_ SG_ 36 ACCEL_Y "unit is tbd";
|
||||
CM_ SG_ 36 YAW_RATE "verify";
|
||||
CM_ SG_ 36 STEERING_TORQUE "does not seem the steer torque, tbd";
|
||||
CM_ SG_ 37 STEER_FRACTION "1/15th of the signal STEER_ANGLE, which is 1.5 deg; note that 0x8 is never set";
|
||||
CM_ SG_ 37 STEER_RATE "factor is tbd";
|
||||
CM_ SG_ 466 ACCEL_NET "net acceleration produced by the system, given ACCEL_CMD, road grade and other factors";
|
||||
CM_ SG_ 466 CRUISE_STATE "Active state is 8, if standstill is requested will switch to state 11(3 sec timer), after timer is elapsed will switch into state 7(standstill). If plus button was pressed - status 9, minus button pressed - status 10";
|
||||
CM_ SG_ 467 SET_SPEED "43 kph are shown as 28mph, so conversion isn't perfect";
|
||||
CM_ SG_ 467 LOW_SPEED_LOCKOUT "in low speed lockout, system would always disengage below 28mph";
|
||||
CM_ SG_ 560 BRAKE_PRESSED "another brake pressed?";
|
||||
CM_ SG_ 608 STEER_TORQUE_DRIVER "driver torque";
|
||||
CM_ SG_ 608 STEER_OVERRIDE "set when driver torque exceeds a certain value";
|
||||
CM_ SG_ 614 ANGLE "set to measured angle when ipas control isn't active";
|
||||
CM_ SG_ 643 COUNTER "only used on cars that use this msg for cruise control";
|
||||
CM_ SG_ 643 BRAKE_STATUS "only used on cars that use this msg for cruise control";
|
||||
CM_ SG_ 643 PRECOLLISION_ACTIVE "set 0.5s before any braking";
|
||||
CM_ SG_ 835 PERMIT_BRAKING "Original ACC has this going high when a car in front is detected. In openpilot and before the PERMIT_BRAKING name, this was "SET_ME_1" and is hardcoded to be high. Unsure if only informational or has an effect though existing usage in openpilot is to always set it to 1. Originally 'PMTBRKG' in the leaked toyota_2017_ref_pt.dbc file and name expansion speculated to be PerMiT BRaKinG.";
|
||||
CM_ SG_ 835 ACCEL_CMD_ALT "Copy of main ACCEL_CMD, but across 8 bits instead of 16 bits like ACCEL_CMD. Unsure if only informational or has an effect. Likely informational as existing openpilot sets this to 0 and no loss of functionality observed. Originally 'AT_RAW' in leaked toyota_2017_ref_pt.dbc file.";
|
||||
CM_ SG_ 921 UI_SET_SPEED "set speed shown in UI with user set unit";
|
||||
CM_ SG_ 951 BRAKE_LIGHTS_ACC "brake lights when ACC commands decel";
|
||||
CM_ SG_ 1042 SET_ME_1 "unclear what this is, but it's always 1 in drive traces";
|
||||
CM_ SG_ 1042 REPEATED_BEEPS "recommended for fcw and other important alerts";
|
||||
CM_ SG_ 1161 SPDVAL1 "Numbers 0-199 is displayed, 200-254 displays circle without number and 255 is for no limit.";
|
||||
CM_ SG_ 1161 SYNCID1 "counter from 1 to f at 1 Hz";
|
||||
CM_ SG_ 1161 SPDVAL2 "conditional speed value 70"
|
||||
CM_ SG_ 1162 SGNNUMP "1 if SPDVAL1 is set, otherwise 0";
|
||||
CM_ SG_ 1162 SYNCID2 "counter from 1 to f at 1 Hz";
|
||||
CM_ SG_ 1163 TSREQPD "always 1";
|
||||
CM_ SG_ 1163 TSRMSW "always 1";
|
||||
CM_ SG_ 1163 OTSGNNTM "always 3";
|
||||
CM_ SG_ 1163 NTLVLSPD "always 3";
|
||||
CM_ SG_ 1163 OVSPNTM "always 3";
|
||||
CM_ SG_ 1163 OVSPVALL "-5 at start then 2 after 2 seconds";
|
||||
CM_ SG_ 1163 OVSPVALM "-5 at start then 5 after 2 seconds";
|
||||
CM_ SG_ 1163 OVSPVALH "-5 at start then 10 after 2 seconds";
|
||||
CM_ SG_ 1163 TSRSPU "always 1";
|
||||
CM_ SG_ 1553 ODOMETER "Unit is dependent upon units signal";
|
||||
|
||||
VAL_ 466 CRUISE_STATE 11 "timer_3sec" 10 "adaptive click down" 9 "adaptive click up" 8 "adaptive engaged" 7 "standstill" 6 "non-adaptive click up" 5 "non-adaptive click down" 4 "non-adaptive hold down" 3 "non-adaptive hold up" 2 "non-adaptive being engaged" 1 "non-adaptive engaged" 0 "off";
|
||||
VAL_ 467 LOW_SPEED_LOCKOUT 2 "low speed locked" 1 "ok";
|
||||
VAL_ 614 STATE 3 "enabled" 1 "disabled";
|
||||
VAL_ 614 DIRECTION_CMD 3 "right" 2 "center" 1 "left";
|
||||
VAL_ 643 STATE 0 "normal" 1 "adaptive_cruise_control" 3 "emergency_braking";
|
||||
VAL_ 921 CRUISE_CONTROL_STATE 2 "disabled" 11 "hold" 10 "hold_waiting_user_cmd" 6 "enabled" 5 "faulted";
|
||||
VAL_ 1042 LDA_ALERT 3 "hold with continuous beep" 2 "LDA unavailable" 1 "hold" 0 "none";
|
||||
VAL_ 1042 BARRIERS 3 "both" 2 "right" 1 "left" 0 "none";
|
||||
VAL_ 1042 RIGHT_LINE 3 "orange" 2 "faded" 1 "solid" 0 "none";
|
||||
VAL_ 1042 LEFT_LINE 3 "orange" 2 "faded" 1 "solid" 0 "none";
|
||||
VAL_ 1553 UNITS 1 "km" 2 "miles";
|
||||
VAL_ 1556 TURN_SIGNALS 3 "none" 2 "right" 1 "left";
|
||||
VAL_ 1161 TSGN1 1 "speed sign" 0 "none";
|
||||
VAL_ 1161 TSGN2 1 "speed sign" 0 "none";
|
||||
VAL_ 1161 SPLSGN2 15 "conditional blank" 4 "wet road" 5 "rain" 0 "none";
|
||||
VAL_ 1162 TSGN3 0 "none" 1 "speed sign" 2 "0 unlimited" 7 "unlimited" 16 "highway" 17 "no highway" 18 "motorway" 19 "no motorway" 20 "in city" 21 "outside city" 22 "pedestrian area" 23 "no pedestrian area" 65 "no overtaking left" 66 "no overtaking right" 67 "overtaking allowed again" 129 "no entry";
|
||||
VAL_ 1162 SPLSGN3 15 "conditional blank" 4 "wet road" 5 "rain" 0 "none";
|
||||
|
||||
|
||||
CM_ "CHFFR_METRIC 37 STEER_ANGLE STEER_ANGLE 0.36 180";
|
||||
|
||||
CM_ "lexus_is_2018_pt.dbc starts here"
|
||||
|
||||
|
||||
|
||||
BO_ 550 BRAKE_MODULE: 8 XXX
|
||||
SG_ BRAKE_PRESSURE : 0|9@0+ (1,0) [0|511] "" XXX
|
||||
SG_ BRAKE_POSITION : 16|9@0+ (1,0) [0|511] "" XXX
|
||||
SG_ BRAKE_PRESSED : 37|1@0+ (1,0) [0|1] "" XXX
|
||||
|
||||
BO_ 581 GAS_PEDAL_ALT: 5 XXX
|
||||
SG_ GAS_PEDAL : 23|8@0+ (0.005,0) [0|1] "" XXX
|
||||
|
||||
BO_ 705 GAS_PEDAL: 8 XXX
|
||||
SG_ GAS_RELEASED : 3|1@0+ (1,0) [0|1] "" XXX
|
||||
SG_ GAS_PEDAL : 55|8@0+ (0.005,0) [0|1] "" XXX
|
||||
|
||||
BO_ 608 STEER_TORQUE_SENSOR: 8 XXX
|
||||
SG_ STEER_TORQUE_EPS : 47|16@0- (1.30,0) [-20000|20000] "" XXX
|
||||
SG_ STEER_TORQUE_DRIVER : 15|16@0- (1,0) [-32768|32767] "" XXX
|
||||
SG_ STEER_OVERRIDE : 0|1@0+ (1,0) [0|1] "" XXX
|
||||
SG_ CHECKSUM : 63|8@0+ (1,0) [0|255] "" XXX
|
||||
SG_ STEER_ANGLE : 31|16@0- (0.0573,0) [-500|500] "" XXX
|
||||
|
||||
BO_ 610 EPS_STATUS: 5 EPS
|
||||
SG_ IPAS_STATE : 3|4@0+ (1,0) [0|15] "" XXX
|
||||
SG_ LKA_STATE : 31|7@0+ (1,0) [0|127] "" XXX
|
||||
SG_ TYPE : 24|1@0+ (1,0) [0|1] "" XXX
|
||||
SG_ CHECKSUM : 39|8@0+ (1,0) [0|255] "" XXX
|
||||
|
||||
BO_ 956 GEAR_PACKET: 8 XXX
|
||||
SG_ GEAR : 13|6@0+ (1,0) [0|63] "" XXX
|
||||
|
||||
BO_ 1009 PCM_CRUISE_ALT: 8 XXX
|
||||
SG_ MAIN_ON : 13|1@0+ (1,0) [0|3] "" XXX
|
||||
SG_ CRUISE_STATE : 10|1@0+ (1,0) [0|1] "" XXX
|
||||
SG_ SET_SPEED : 23|8@0+ (1,0) [0|255] "mph" XXX
|
||||
|
||||
BO_ 1599 LIGHT_STALK_ISH: 8 SCM
|
||||
SG_ AUTO_HIGH_BEAM : 19|1@0+ (1,0) [0|1] "" XXX
|
||||
|
||||
CM_ SG_ 550 BRAKE_PRESSURE "seems prop to pedal force";
|
||||
CM_ SG_ 550 BRAKE_POSITION "seems proportional to pedal displacement, unclear the max value of 0x1c8";
|
||||
CM_ SG_ 610 TYPE "seems 1 on Corolla, 0 on all others";
|
||||
CM_ SG_ 1009 SET_SPEED "units seem to be whatever the car is set to";
|
||||
VAL_ 956 GEAR 0 "D" 1 "S" 8 "N" 16 "R" 32 "P";
|
||||
VAL_ 610 IPAS_STATE 5 "override" 3 "enabled" 1 "disabled";
|
||||
VAL_ 610 LKA_STATE 25 "temporary_fault" 9 "temporary_fault2" 5 "active" 1 "standby";
|
||||
@@ -350,6 +350,14 @@ BO_ 1163 RSA3: 8 FCM
|
||||
SG_ OVSPVALH : 27|4@0+ (1,-5) [0|0] "" XXX
|
||||
SG_ TSRSPU : 33|2@0+ (1,0) [0|0] "" XXX
|
||||
|
||||
BO_ 956 GEAR_PACKET2: 8 XXX
|
||||
SG_ SPORT_ON : 2|1@0+ (1,0) [0|1] "" XXX
|
||||
SG_ GEAR : 13|6@0+ (1,0) [0|63] "" XXX
|
||||
SG_ SPORT_GEAR_ON : 33|1@0+ (1,0) [0|1] "" XXX
|
||||
SG_ SPORT_GEAR : 38|3@0+ (1,0) [0|7] "" XXX
|
||||
SG_ ECON_ON : 40|1@0+ (1,0) [0|1] "" XXX
|
||||
SG_ DRIVE_ENGAGED : 47|1@0+ (1,0) [0|1] "" XXX
|
||||
|
||||
CM_ SG_ 36 ACCEL_Y "unit is tbd";
|
||||
CM_ SG_ 36 YAW_RATE "verify";
|
||||
CM_ SG_ 36 STEERING_TORQUE "does not seem the steer torque, tbd";
|
||||
@@ -396,15 +404,17 @@ VAL_ 614 DIRECTION_CMD 3 "right" 2 "center" 1 "left";
|
||||
VAL_ 643 STATE 0 "normal" 1 "adaptive_cruise_control" 3 "emergency_braking";
|
||||
VAL_ 835 ACC_TYPE 2 "permanent low speed lockout" 1 "ok";
|
||||
VAL_ 921 CRUISE_CONTROL_STATE 2 "disabled" 11 "hold" 10 "hold_waiting_user_cmd" 6 "enabled" 5 "faulted";
|
||||
VAL_ 956 SPORT_ON 0 "off" 1 "on";
|
||||
VAL_ 956 ECON_ON 0 "off" 1 "on";
|
||||
VAL_ 1042 LDA_ALERT 3 "hold with continuous beep" 2 "LDA unavailable" 1 "hold" 0 "none";
|
||||
VAL_ 1042 BARRIERS 3 "both" 2 "right" 1 "left" 0 "none";
|
||||
VAL_ 1042 RIGHT_LINE 3 "orange" 2 "faded" 1 "solid" 0 "none";
|
||||
VAL_ 1042 LEFT_LINE 3 "orange" 2 "faded" 1 "solid" 0 "none";
|
||||
VAL_ 1553 UNITS 1 "km" 2 "miles";
|
||||
VAL_ 1556 TURN_SIGNALS 3 "none" 2 "right" 1 "left";
|
||||
VAL_ 1161 TSGN1 1 "speed sign" 0 "none";
|
||||
VAL_ 1161 TSGN1 36 "speed sign mph" 1 "speed sign kph" 0 "none";
|
||||
VAL_ 1161 TSGN2 1 "speed sign" 0 "none";
|
||||
VAL_ 1161 SPLSGN2 15 "conditional blank" 4 "wet road" 5 "rain" 0 "none";
|
||||
VAL_ 1161 SPLSGN2 15 "conditional blank" 6 "snow" 5 "rain" 4 "wet road" 5 "rain" 3 "left" 2 "right" 1 "time" 0 "none";
|
||||
VAL_ 1162 TSGN3 0 "none" 1 "speed sign" 2 "0 unlimited" 7 "unlimited" 16 "highway" 17 "no highway" 18 "motorway" 19 "no motorway" 20 "in city" 21 "outside city" 22 "pedestrian area" 23 "no pedestrian area" 65 "no overtaking left" 66 "no overtaking right" 67 "overtaking allowed again" 81 "no right turn" 97 "stop" 105 "yield" 113 "stop" 114 "yield us" 129 "no entry" 138 "no entry tss2" 145 "do not enter";
|
||||
VAL_ 1162 SPLSGN3 15 "conditional blank" 4 "wet road" 5 "rain" 0 "none";
|
||||
|
||||
|
||||
@@ -442,6 +442,7 @@ BO_ 956 GEAR_PACKET: 8 XXX
|
||||
SG_ SPORT_ON : 2|1@0+ (1,0) [0|1] "" XXX
|
||||
SG_ GEAR : 13|6@0+ (1,0) [0|63] "" XXX
|
||||
SG_ ECON_ON : 40|1@0+ (1,0) [0|1] "" XXX
|
||||
SG_ SPORT_ON_2 : 55|1@0+ (1,0) [0|1] "" XXX
|
||||
|
||||
CM_ SG_ 548 BRAKE_PRESSURE "seems prop to pedal force";
|
||||
CM_ SG_ 548 BRAKE_POSITION "seems proportional to pedal displacement, unclear the max value of 0x1c8";
|
||||
@@ -451,3 +452,4 @@ VAL_ 610 LKA_STATE 25 "temporary_fault" 9 "temporary_fault2" 5 "active" 1 "stand
|
||||
VAL_ 956 GEAR 0 "D" 1 "S" 8 "N" 16 "R" 32 "P";
|
||||
VAL_ 956 SPORT_ON 0 "off" 1 "on";
|
||||
VAL_ 956 ECON_ON 0 "off" 1 "on";
|
||||
VAL_ 956 SPORT_ON_2 0 "off" 1 "on";
|
||||
|
||||
0
panda/board/Makefile
Normal file
@@ -37,6 +37,16 @@ else:
|
||||
"-DPANDA",
|
||||
]
|
||||
|
||||
if FindFile('dp_vw_panda', '/data/params/d') != None:
|
||||
with open('/data/params/d/dp_vw_panda') as f:
|
||||
if (int(f.read().strip())) == 1:
|
||||
PROJECT_FLAGS += ['-Dvw']
|
||||
|
||||
if FindFile('dp_panda_fake_black', '/data/params/d') != None:
|
||||
with open('/data/params/d/dp_panda_fake_black') as f:
|
||||
if (int(f.read().strip())) == 1:
|
||||
PROJECT_FLAGS += ['-Dfake_black_panda']
|
||||
|
||||
|
||||
def get_version(builder, build_type):
|
||||
version_file = File('../VERSION').srcnode().abspath
|
||||
|
||||
@@ -56,12 +56,7 @@ void uno_set_gps_load_switch(bool enabled) {
|
||||
}
|
||||
|
||||
void uno_set_bootkick(bool enabled){
|
||||
if(enabled){
|
||||
set_gpio_output(GPIOB, 14, false);
|
||||
} else {
|
||||
// We want the pin to be floating, not forced high!
|
||||
set_gpio_mode(GPIOB, 14, MODE_INPUT);
|
||||
}
|
||||
set_gpio_output(GPIOB, 14, !enabled);
|
||||
}
|
||||
|
||||
void uno_bootkick(void) {
|
||||
@@ -77,9 +72,11 @@ void uno_set_usb_power_mode(uint8_t mode) {
|
||||
bool valid = false;
|
||||
switch (mode) {
|
||||
case USB_POWER_CLIENT:
|
||||
uno_set_phone_power(false);
|
||||
valid = true;
|
||||
break;
|
||||
case USB_POWER_CDP:
|
||||
uno_set_phone_power(true);
|
||||
uno_bootkick();
|
||||
valid = true;
|
||||
break;
|
||||
|
||||
@@ -103,10 +103,24 @@ void set_safety_mode(uint16_t mode, int16_t param) {
|
||||
switch (mode_copy) {
|
||||
case SAFETY_SILENT:
|
||||
set_intercept_relay(false);
|
||||
#ifdef vw
|
||||
// Volkswagen community port:
|
||||
// J533 integrations with White/Grey Panda really need Panda to respond
|
||||
// at all times. Let the CAN transceivers ACK traffic unless this is
|
||||
// BP/Uno where the physical relay makes it irrelevant. This makes
|
||||
// SILENT identical to NOOUTPUT for White/Grey Panda.
|
||||
if (current_board->has_obd) {
|
||||
current_board->set_can_mode(CAN_MODE_NORMAL);
|
||||
can_silent = ALL_CAN_SILENT;
|
||||
} else {
|
||||
can_silent = ALL_CAN_LIVE;
|
||||
}
|
||||
#else
|
||||
if (current_board->has_obd) {
|
||||
current_board->set_can_mode(CAN_MODE_NORMAL);
|
||||
}
|
||||
can_silent = ALL_CAN_SILENT;
|
||||
#endif
|
||||
break;
|
||||
case SAFETY_NOOUTPUT:
|
||||
set_intercept_relay(false);
|
||||
@@ -319,7 +333,11 @@ int usb_cb_control_msg(USB_Setup_TypeDef *setup, uint8_t *resp, bool hardwired)
|
||||
break;
|
||||
// **** 0xc1: get hardware type
|
||||
case 0xc1:
|
||||
#ifdef fake_black_panda
|
||||
resp[0] = HW_TYPE_BLACK_PANDA;
|
||||
#else
|
||||
resp[0] = hw_type;
|
||||
#endif
|
||||
resp_len = 1;
|
||||
break;
|
||||
// **** 0xd0: fetch serial number
|
||||
|
||||
@@ -28,7 +28,14 @@ void set_power_save_state(int state) {
|
||||
enable = true;
|
||||
}
|
||||
|
||||
#ifdef vw
|
||||
// Volkswagen community port:
|
||||
// If this is a White or Grey Panda, always keep the CAN transceivers
|
||||
// powered up so that transparent forwarding is maintained.
|
||||
current_board->enable_can_transceivers(current_board->has_obd ? enable : true);
|
||||
#else
|
||||
current_board->enable_can_transceivers(enable);
|
||||
#endif
|
||||
|
||||
// Switch EPS/GPS
|
||||
if (enable) {
|
||||
|
||||
@@ -24,9 +24,32 @@ static int nooutput_tx_lin_hook(int lin_num, uint8_t *data, int len) {
|
||||
}
|
||||
|
||||
static int default_fwd_hook(int bus_num, CAN_FIFOMailBox_TypeDef *to_fwd) {
|
||||
UNUSED(bus_num);
|
||||
UNUSED(to_fwd);
|
||||
#ifdef vw
|
||||
// Volkswagen community port: Advanced Virtual Relay Technology!
|
||||
// Make Panda fully transparent from bus 0->2 and bus 2->0 if not otherwise
|
||||
// instructed by EON/OP, returning the car to stock behavior under NOOUTPUT.
|
||||
// Don't do this for BP/C2, where we have Advanced Actual Relay Technology.
|
||||
int bus_fwd = -1;
|
||||
|
||||
if(hw_type == HW_TYPE_WHITE_PANDA || hw_type == HW_TYPE_GREY_PANDA) {
|
||||
switch (bus_num) {
|
||||
case 0:
|
||||
bus_fwd = 2;
|
||||
break;
|
||||
case 2:
|
||||
bus_fwd = 0;
|
||||
break;
|
||||
default:
|
||||
bus_fwd = -1;
|
||||
break;
|
||||
}
|
||||
}
|
||||
return bus_fwd;
|
||||
#else
|
||||
UNUSED(bus_num);
|
||||
return -1;
|
||||
#endif
|
||||
}
|
||||
|
||||
const safety_hooks nooutput_hooks = {
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
// Safety-relevant steering constants for Volkswagen
|
||||
const int VOLKSWAGEN_MAX_STEER = 300; // 3.0 Nm (EPS side max of 3.0Nm with fault if violated)
|
||||
const int VOLKSWAGEN_MAX_RT_DELTA = 75; // 4 max rate up * 50Hz send rate * 250000 RT interval / 1000000 = 50 ; 50 * 1.5 for safety pad = 75
|
||||
const int VOLKSWAGEN_MAX_RT_DELTA = 188; // 10 max rate up * 50Hz send rate * 250000 RT interval / 1000000 = 125 ; 125 * 1.5 for safety pad = 187.5
|
||||
const uint32_t VOLKSWAGEN_RT_INTERVAL = 250000; // 250ms between real time checks
|
||||
const int VOLKSWAGEN_MAX_RATE_UP = 4; // 2.0 Nm/s RoC limit (EPS rack has own soft-limit of 5.0 Nm/s)
|
||||
const int VOLKSWAGEN_MAX_RATE_UP = 10; // 5.0 Nm/s RoC limit (EPS rack has own soft-limit of 5.0 Nm/s)
|
||||
const int VOLKSWAGEN_MAX_RATE_DOWN = 10; // 5.0 Nm/s RoC limit (EPS rack has own soft-limit of 5.0 Nm/s)
|
||||
const int VOLKSWAGEN_DRIVER_TORQUE_ALLOWANCE = 80;
|
||||
const int VOLKSWAGEN_DRIVER_TORQUE_FACTOR = 3;
|
||||
|
||||
1
phonelibs/mapbox-gl-native-qt/include/QMapbox
Normal file
@@ -0,0 +1 @@
|
||||
#include "qmapbox.hpp"
|
||||
1
phonelibs/mapbox-gl-native-qt/include/QMapboxGL
Normal file
@@ -0,0 +1 @@
|
||||
#include "qmapboxgl.hpp"
|
||||
147
phonelibs/mapbox-gl-native-qt/include/qmapbox.hpp
Normal file
@@ -0,0 +1,147 @@
|
||||
#ifndef QMAPBOX_H
|
||||
#define QMAPBOX_H
|
||||
|
||||
#include <QColor>
|
||||
#include <QPair>
|
||||
#include <QString>
|
||||
#include <QVariant>
|
||||
#include <QVector>
|
||||
|
||||
// This header follows the Qt coding style: https://wiki.qt.io/Qt_Coding_Style
|
||||
|
||||
#if !defined(QT_MAPBOXGL_STATIC)
|
||||
# if defined(QT_BUILD_MAPBOXGL_LIB)
|
||||
# define Q_MAPBOXGL_EXPORT Q_DECL_EXPORT
|
||||
# else
|
||||
# define Q_MAPBOXGL_EXPORT Q_DECL_IMPORT
|
||||
# endif
|
||||
#else
|
||||
# define Q_MAPBOXGL_EXPORT
|
||||
#endif
|
||||
|
||||
namespace QMapbox {
|
||||
|
||||
typedef QPair<double, double> Coordinate;
|
||||
typedef QPair<Coordinate, double> CoordinateZoom;
|
||||
typedef QPair<double, double> ProjectedMeters;
|
||||
|
||||
typedef QVector<Coordinate> Coordinates;
|
||||
typedef QVector<Coordinates> CoordinatesCollection;
|
||||
|
||||
typedef QVector<CoordinatesCollection> CoordinatesCollections;
|
||||
|
||||
struct Q_MAPBOXGL_EXPORT Feature {
|
||||
enum Type {
|
||||
PointType = 1,
|
||||
LineStringType,
|
||||
PolygonType
|
||||
};
|
||||
|
||||
/*! Class constructor. */
|
||||
Feature(Type type_ = PointType, const CoordinatesCollections& geometry_ = CoordinatesCollections(),
|
||||
const QVariantMap& properties_ = QVariantMap(), const QVariant& id_ = QVariant())
|
||||
: type(type_), geometry(geometry_), properties(properties_), id(id_) {}
|
||||
|
||||
Type type;
|
||||
CoordinatesCollections geometry;
|
||||
QVariantMap properties;
|
||||
QVariant id;
|
||||
};
|
||||
|
||||
struct Q_MAPBOXGL_EXPORT ShapeAnnotationGeometry {
|
||||
enum Type {
|
||||
LineStringType = 1,
|
||||
PolygonType,
|
||||
MultiLineStringType,
|
||||
MultiPolygonType
|
||||
};
|
||||
|
||||
/*! Class constructor. */
|
||||
ShapeAnnotationGeometry(Type type_ = LineStringType, const CoordinatesCollections& geometry_ = CoordinatesCollections())
|
||||
: type(type_), geometry(geometry_) {}
|
||||
|
||||
Type type;
|
||||
CoordinatesCollections geometry;
|
||||
};
|
||||
|
||||
struct Q_MAPBOXGL_EXPORT SymbolAnnotation {
|
||||
Coordinate geometry;
|
||||
QString icon;
|
||||
};
|
||||
|
||||
struct Q_MAPBOXGL_EXPORT LineAnnotation {
|
||||
/*! Class constructor. */
|
||||
LineAnnotation(const ShapeAnnotationGeometry& geometry_ = ShapeAnnotationGeometry(), float opacity_ = 1.0f,
|
||||
float width_ = 1.0f, const QColor& color_ = Qt::black)
|
||||
: geometry(geometry_), opacity(opacity_), width(width_), color(color_) {}
|
||||
|
||||
ShapeAnnotationGeometry geometry;
|
||||
float opacity;
|
||||
float width;
|
||||
QColor color;
|
||||
};
|
||||
|
||||
struct Q_MAPBOXGL_EXPORT FillAnnotation {
|
||||
/*! Class constructor. */
|
||||
FillAnnotation(const ShapeAnnotationGeometry& geometry_ = ShapeAnnotationGeometry(), float opacity_ = 1.0f,
|
||||
const QColor& color_ = Qt::black, const QVariant& outlineColor_ = QVariant())
|
||||
: geometry(geometry_), opacity(opacity_), color(color_), outlineColor(outlineColor_) {}
|
||||
|
||||
ShapeAnnotationGeometry geometry;
|
||||
float opacity;
|
||||
QColor color;
|
||||
QVariant outlineColor;
|
||||
};
|
||||
|
||||
typedef QVariant Annotation;
|
||||
typedef quint32 AnnotationID;
|
||||
typedef QVector<AnnotationID> AnnotationIDs;
|
||||
|
||||
enum NetworkMode {
|
||||
Online, // Default
|
||||
Offline,
|
||||
};
|
||||
|
||||
Q_MAPBOXGL_EXPORT QVector<QPair<QString, QString> >& defaultStyles();
|
||||
|
||||
Q_MAPBOXGL_EXPORT NetworkMode networkMode();
|
||||
Q_MAPBOXGL_EXPORT void setNetworkMode(NetworkMode);
|
||||
|
||||
// This struct is a 1:1 copy of mbgl::CustomLayerRenderParameters.
|
||||
struct Q_MAPBOXGL_EXPORT CustomLayerRenderParameters {
|
||||
double width;
|
||||
double height;
|
||||
double latitude;
|
||||
double longitude;
|
||||
double zoom;
|
||||
double bearing;
|
||||
double pitch;
|
||||
double fieldOfView;
|
||||
};
|
||||
|
||||
class Q_MAPBOXGL_EXPORT CustomLayerHostInterface {
|
||||
public:
|
||||
virtual ~CustomLayerHostInterface() = default;
|
||||
virtual void initialize() = 0;
|
||||
virtual void render(const CustomLayerRenderParameters&) = 0;
|
||||
virtual void deinitialize() = 0;
|
||||
};
|
||||
|
||||
Q_MAPBOXGL_EXPORT double metersPerPixelAtLatitude(double latitude, double zoom);
|
||||
Q_MAPBOXGL_EXPORT ProjectedMeters projectedMetersForCoordinate(const Coordinate &);
|
||||
Q_MAPBOXGL_EXPORT Coordinate coordinateForProjectedMeters(const ProjectedMeters &);
|
||||
|
||||
} // namespace QMapbox
|
||||
|
||||
Q_DECLARE_METATYPE(QMapbox::Coordinate);
|
||||
Q_DECLARE_METATYPE(QMapbox::Coordinates);
|
||||
Q_DECLARE_METATYPE(QMapbox::CoordinatesCollection);
|
||||
Q_DECLARE_METATYPE(QMapbox::CoordinatesCollections);
|
||||
Q_DECLARE_METATYPE(QMapbox::Feature);
|
||||
|
||||
Q_DECLARE_METATYPE(QMapbox::SymbolAnnotation);
|
||||
Q_DECLARE_METATYPE(QMapbox::ShapeAnnotationGeometry);
|
||||
Q_DECLARE_METATYPE(QMapbox::LineAnnotation);
|
||||
Q_DECLARE_METATYPE(QMapbox::FillAnnotation);
|
||||
|
||||
#endif // QMAPBOX_H
|
||||
277
phonelibs/mapbox-gl-native-qt/include/qmapboxgl.hpp
Normal file
@@ -0,0 +1,277 @@
|
||||
#ifndef QMAPBOXGL_H
|
||||
#define QMAPBOXGL_H
|
||||
|
||||
#include <QImage>
|
||||
#include <QMapbox>
|
||||
#include <QMargins>
|
||||
#include <QObject>
|
||||
#include <QPointF>
|
||||
#include <QSize>
|
||||
#include <QString>
|
||||
#include <QStringList>
|
||||
|
||||
#include <functional>
|
||||
|
||||
class QMapboxGLPrivate;
|
||||
|
||||
// This header follows the Qt coding style: https://wiki.qt.io/Qt_Coding_Style
|
||||
|
||||
class Q_MAPBOXGL_EXPORT QMapboxGLSettings
|
||||
{
|
||||
public:
|
||||
QMapboxGLSettings();
|
||||
|
||||
enum GLContextMode {
|
||||
UniqueGLContext = 0,
|
||||
SharedGLContext
|
||||
};
|
||||
|
||||
enum MapMode {
|
||||
Continuous = 0,
|
||||
Static
|
||||
};
|
||||
|
||||
enum ConstrainMode {
|
||||
NoConstrain = 0,
|
||||
ConstrainHeightOnly,
|
||||
ConstrainWidthAndHeight
|
||||
};
|
||||
|
||||
enum ViewportMode {
|
||||
DefaultViewport = 0,
|
||||
FlippedYViewport
|
||||
};
|
||||
|
||||
GLContextMode contextMode() const;
|
||||
void setContextMode(GLContextMode);
|
||||
|
||||
MapMode mapMode() const;
|
||||
void setMapMode(MapMode);
|
||||
|
||||
ConstrainMode constrainMode() const;
|
||||
void setConstrainMode(ConstrainMode);
|
||||
|
||||
ViewportMode viewportMode() const;
|
||||
void setViewportMode(ViewportMode);
|
||||
|
||||
unsigned cacheDatabaseMaximumSize() const;
|
||||
void setCacheDatabaseMaximumSize(unsigned);
|
||||
|
||||
QString cacheDatabasePath() const;
|
||||
void setCacheDatabasePath(const QString &);
|
||||
|
||||
QString assetPath() const;
|
||||
void setAssetPath(const QString &);
|
||||
|
||||
QString accessToken() const;
|
||||
void setAccessToken(const QString &);
|
||||
|
||||
QString apiBaseUrl() const;
|
||||
void setApiBaseUrl(const QString &);
|
||||
|
||||
QString localFontFamily() const;
|
||||
void setLocalFontFamily(const QString &);
|
||||
|
||||
std::function<std::string(const std::string &)> resourceTransform() const;
|
||||
void setResourceTransform(const std::function<std::string(const std::string &)> &);
|
||||
|
||||
private:
|
||||
GLContextMode m_contextMode;
|
||||
MapMode m_mapMode;
|
||||
ConstrainMode m_constrainMode;
|
||||
ViewportMode m_viewportMode;
|
||||
|
||||
unsigned m_cacheMaximumSize;
|
||||
QString m_cacheDatabasePath;
|
||||
QString m_assetPath;
|
||||
QString m_accessToken;
|
||||
QString m_apiBaseUrl;
|
||||
QString m_localFontFamily;
|
||||
std::function<std::string(const std::string &)> m_resourceTransform;
|
||||
};
|
||||
|
||||
struct Q_MAPBOXGL_EXPORT QMapboxGLCameraOptions {
|
||||
QVariant center; // Coordinate
|
||||
QVariant anchor; // QPointF
|
||||
QVariant zoom; // double
|
||||
QVariant bearing; // double
|
||||
QVariant pitch; // double
|
||||
};
|
||||
|
||||
class Q_MAPBOXGL_EXPORT QMapboxGL : public QObject
|
||||
{
|
||||
Q_OBJECT
|
||||
Q_PROPERTY(double latitude READ latitude WRITE setLatitude)
|
||||
Q_PROPERTY(double longitude READ longitude WRITE setLongitude)
|
||||
Q_PROPERTY(double zoom READ zoom WRITE setZoom)
|
||||
Q_PROPERTY(double bearing READ bearing WRITE setBearing)
|
||||
Q_PROPERTY(double pitch READ pitch WRITE setPitch)
|
||||
Q_PROPERTY(QString styleJson READ styleJson WRITE setStyleJson)
|
||||
Q_PROPERTY(QString styleUrl READ styleUrl WRITE setStyleUrl)
|
||||
Q_PROPERTY(double scale READ scale WRITE setScale)
|
||||
Q_PROPERTY(QMapbox::Coordinate coordinate READ coordinate WRITE setCoordinate)
|
||||
Q_PROPERTY(QMargins margins READ margins WRITE setMargins)
|
||||
|
||||
public:
|
||||
enum MapChange {
|
||||
MapChangeRegionWillChange = 0,
|
||||
MapChangeRegionWillChangeAnimated,
|
||||
MapChangeRegionIsChanging,
|
||||
MapChangeRegionDidChange,
|
||||
MapChangeRegionDidChangeAnimated,
|
||||
MapChangeWillStartLoadingMap,
|
||||
MapChangeDidFinishLoadingMap,
|
||||
MapChangeDidFailLoadingMap,
|
||||
MapChangeWillStartRenderingFrame,
|
||||
MapChangeDidFinishRenderingFrame,
|
||||
MapChangeDidFinishRenderingFrameFullyRendered,
|
||||
MapChangeWillStartRenderingMap,
|
||||
MapChangeDidFinishRenderingMap,
|
||||
MapChangeDidFinishRenderingMapFullyRendered,
|
||||
MapChangeDidFinishLoadingStyle,
|
||||
MapChangeSourceDidChange
|
||||
};
|
||||
|
||||
enum MapLoadingFailure {
|
||||
StyleParseFailure,
|
||||
StyleLoadFailure,
|
||||
NotFoundFailure,
|
||||
UnknownFailure
|
||||
};
|
||||
|
||||
// Determines the orientation of the map.
|
||||
enum NorthOrientation {
|
||||
NorthUpwards, // Default
|
||||
NorthRightwards,
|
||||
NorthDownwards,
|
||||
NorthLeftwards,
|
||||
};
|
||||
|
||||
QMapboxGL(QObject* parent = 0,
|
||||
const QMapboxGLSettings& = QMapboxGLSettings(),
|
||||
const QSize& size = QSize(),
|
||||
qreal pixelRatio = 1);
|
||||
virtual ~QMapboxGL();
|
||||
|
||||
QString styleJson() const;
|
||||
QString styleUrl() const;
|
||||
|
||||
void setStyleJson(const QString &);
|
||||
void setStyleUrl(const QString &);
|
||||
|
||||
double latitude() const;
|
||||
void setLatitude(double latitude);
|
||||
|
||||
double longitude() const;
|
||||
void setLongitude(double longitude);
|
||||
|
||||
double scale() const;
|
||||
void setScale(double scale, const QPointF ¢er = QPointF());
|
||||
|
||||
double zoom() const;
|
||||
void setZoom(double zoom);
|
||||
|
||||
double minimumZoom() const;
|
||||
double maximumZoom() const;
|
||||
|
||||
double bearing() const;
|
||||
void setBearing(double degrees);
|
||||
void setBearing(double degrees, const QPointF ¢er);
|
||||
|
||||
double pitch() const;
|
||||
void setPitch(double pitch);
|
||||
void pitchBy(double pitch);
|
||||
|
||||
NorthOrientation northOrientation() const;
|
||||
void setNorthOrientation(NorthOrientation);
|
||||
|
||||
QMapbox::Coordinate coordinate() const;
|
||||
void setCoordinate(const QMapbox::Coordinate &);
|
||||
void setCoordinateZoom(const QMapbox::Coordinate &, double zoom);
|
||||
|
||||
void jumpTo(const QMapboxGLCameraOptions&);
|
||||
|
||||
void setGestureInProgress(bool inProgress);
|
||||
|
||||
void setTransitionOptions(qint64 duration, qint64 delay = 0);
|
||||
|
||||
void addAnnotationIcon(const QString &name, const QImage &sprite);
|
||||
|
||||
QMapbox::AnnotationID addAnnotation(const QMapbox::Annotation &);
|
||||
void updateAnnotation(QMapbox::AnnotationID, const QMapbox::Annotation &);
|
||||
void removeAnnotation(QMapbox::AnnotationID);
|
||||
|
||||
bool setLayoutProperty(const QString &layer, const QString &property, const QVariant &value);
|
||||
bool setPaintProperty(const QString &layer, const QString &property, const QVariant &value);
|
||||
|
||||
bool isFullyLoaded() const;
|
||||
|
||||
void moveBy(const QPointF &offset);
|
||||
void scaleBy(double scale, const QPointF ¢er = QPointF());
|
||||
void rotateBy(const QPointF &first, const QPointF &second);
|
||||
|
||||
void resize(const QSize &size);
|
||||
|
||||
double metersPerPixelAtLatitude(double latitude, double zoom) const;
|
||||
QMapbox::ProjectedMeters projectedMetersForCoordinate(const QMapbox::Coordinate &) const;
|
||||
QMapbox::Coordinate coordinateForProjectedMeters(const QMapbox::ProjectedMeters &) const;
|
||||
QPointF pixelForCoordinate(const QMapbox::Coordinate &) const;
|
||||
QMapbox::Coordinate coordinateForPixel(const QPointF &) const;
|
||||
|
||||
QMapbox::CoordinateZoom coordinateZoomForBounds(const QMapbox::Coordinate &sw, QMapbox::Coordinate &ne) const;
|
||||
QMapbox::CoordinateZoom coordinateZoomForBounds(const QMapbox::Coordinate &sw, QMapbox::Coordinate &ne, double bearing, double pitch);
|
||||
|
||||
void setMargins(const QMargins &margins);
|
||||
QMargins margins() const;
|
||||
|
||||
void addSource(const QString &sourceID, const QVariantMap& params);
|
||||
bool sourceExists(const QString &sourceID);
|
||||
void updateSource(const QString &sourceID, const QVariantMap& params);
|
||||
void removeSource(const QString &sourceID);
|
||||
|
||||
void addImage(const QString &name, const QImage &sprite);
|
||||
void removeImage(const QString &name);
|
||||
|
||||
void addCustomLayer(const QString &id,
|
||||
QScopedPointer<QMapbox::CustomLayerHostInterface>& host,
|
||||
const QString& before = QString());
|
||||
void addLayer(const QVariantMap ¶ms, const QString& before = QString());
|
||||
bool layerExists(const QString &id);
|
||||
void removeLayer(const QString &id);
|
||||
|
||||
QVector<QString> layerIds() const;
|
||||
|
||||
void setFilter(const QString &layer, const QVariant &filter);
|
||||
QVariant getFilter(const QString &layer) const;
|
||||
// When rendering on a different thread,
|
||||
// should be called on the render thread.
|
||||
void createRenderer();
|
||||
void destroyRenderer();
|
||||
void setFramebufferObject(quint32 fbo, const QSize &size);
|
||||
|
||||
public slots:
|
||||
void render();
|
||||
void connectionEstablished();
|
||||
|
||||
// Commit changes, load all the resources
|
||||
// and renders the map when completed.
|
||||
void startStaticRender();
|
||||
|
||||
signals:
|
||||
void needsRendering();
|
||||
void mapChanged(QMapboxGL::MapChange);
|
||||
void mapLoadingFailed(QMapboxGL::MapLoadingFailure, const QString &reason);
|
||||
void copyrightsChanged(const QString ©rightsHtml);
|
||||
|
||||
void staticRenderFinished(const QString &error);
|
||||
|
||||
private:
|
||||
Q_DISABLE_COPY(QMapboxGL)
|
||||
|
||||
QMapboxGLPrivate *d_ptr;
|
||||
};
|
||||
|
||||
Q_DECLARE_METATYPE(QMapboxGL::MapChange);
|
||||
Q_DECLARE_METATYPE(QMapboxGL::MapLoadingFailure);
|
||||
|
||||
#endif // QMAPBOXGL_H
|
||||
70
release/build_devel.sh
Executable file
@@ -0,0 +1,70 @@
|
||||
#!/usr/bin/bash -e
|
||||
|
||||
DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" >/dev/null && pwd)"
|
||||
|
||||
TARGET_DIR=/data/openpilot
|
||||
SOURCE_DIR="$(git rev-parse --show-toplevel)"
|
||||
|
||||
# set git identity
|
||||
source $DIR/identity.sh
|
||||
|
||||
echo "[-] Setting up repo T=$SECONDS"
|
||||
if [ ! -d "$TARGET_DIR" ]; then
|
||||
mkdir -p $TARGET_DIR
|
||||
cd $TARGET_DIR
|
||||
git init
|
||||
git remote add origin git@github.com:commaai/openpilot.git
|
||||
fi
|
||||
|
||||
echo "[-] bringing master-ci and devel in sync T=$SECONDS"
|
||||
cd $TARGET_DIR
|
||||
git prune || true
|
||||
git remote prune origin || true
|
||||
git fetch origin master-ci
|
||||
git fetch origin devel
|
||||
|
||||
git checkout -f --track origin/master-ci
|
||||
git reset --hard master-ci
|
||||
git checkout master-ci
|
||||
git reset --hard origin/devel
|
||||
git clean -xdf
|
||||
|
||||
# remove everything except .git
|
||||
echo "[-] erasing old openpilot T=$SECONDS"
|
||||
find . -maxdepth 1 -not -path './.git' -not -name '.' -not -name '..' -exec rm -rf '{}' \;
|
||||
|
||||
# reset source tree
|
||||
cd $SOURCE_DIR
|
||||
git clean -xdf
|
||||
|
||||
# do the files copy
|
||||
echo "[-] copying files T=$SECONDS"
|
||||
cd $SOURCE_DIR
|
||||
cp -pR --parents $(cat release/files_common) $TARGET_DIR/
|
||||
cp -pR --parents $(cat release/files_tici) $TARGET_DIR/
|
||||
if [ ! -z "$EXTRA_FILES" ]; then
|
||||
cp -pR --parents $EXTRA_FILES $TARGET_DIR/
|
||||
fi
|
||||
|
||||
# append source commit hash and build date to version
|
||||
GIT_HASH=$(git --git-dir=$SOURCE_DIR/.git rev-parse --short HEAD)
|
||||
DATETIME=$(date '+%Y-%m-%dT%H:%M:%S')
|
||||
VERSION=$(cat selfdrive/common/version.h | awk -F\" '{print $2}')
|
||||
echo "#define COMMA_VERSION \"$VERSION-$GIT_HASH-$DATETIME\"" > selfdrive/common/version.h
|
||||
|
||||
# in the directory
|
||||
cd $TARGET_DIR
|
||||
rm -f panda/board/obj/panda.bin.signed
|
||||
|
||||
echo "[-] committing version $VERSION T=$SECONDS"
|
||||
git add -f .
|
||||
git status
|
||||
git commit -a -m "openpilot v$VERSION release"
|
||||
|
||||
if [ ! -z "$PUSH" ]; then
|
||||
echo "[-] Pushing to $PUSH T=$SECONDS"
|
||||
git remote set-url origin git@github.com:commaai/openpilot.git
|
||||
git push -f origin master-ci:$PUSH
|
||||
fi
|
||||
|
||||
echo "[-] done T=$SECONDS"
|
||||
@@ -55,6 +55,14 @@ scons -j3
|
||||
python selfdrive/manager/test/test_manager.py
|
||||
selfdrive/car/tests/test_car_interfaces.py
|
||||
|
||||
# Ensure no submodules in release
|
||||
if test "$(git submodule--helper list | wc -l)" -gt "0"; then
|
||||
echo "submodules found:"
|
||||
git submodule--helper list
|
||||
exit 1
|
||||
fi
|
||||
git submodule status
|
||||
|
||||
# Cleanup
|
||||
find . -name '*.a' -delete
|
||||
find . -name '*.o' -delete
|
||||
|
||||
91
release/build_release3.sh
Executable file
@@ -0,0 +1,91 @@
|
||||
#!/usr/bin/bash -e
|
||||
|
||||
# git diff --name-status origin/release3-staging | grep "^A" | less
|
||||
|
||||
DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" >/dev/null && pwd)"
|
||||
|
||||
cd $DIR
|
||||
|
||||
BUILD_DIR=/data/openpilot
|
||||
SOURCE_DIR="$(git rev-parse --show-toplevel)"
|
||||
|
||||
BRANCH=release3-staging
|
||||
|
||||
# set git identity
|
||||
source $DIR/identity.sh
|
||||
|
||||
echo "[-] Setting up repo T=$SECONDS"
|
||||
rm -rf $BUILD_DIR
|
||||
mkdir -p $BUILD_DIR
|
||||
cd $BUILD_DIR
|
||||
git init
|
||||
git remote add origin git@github.com:commaai/openpilot.git
|
||||
git checkout -f -B $BRANCH
|
||||
|
||||
# do the files copy
|
||||
echo "[-] copying files T=$SECONDS"
|
||||
cd $SOURCE_DIR
|
||||
cp -pR --parents $(cat release/files_common) $BUILD_DIR/
|
||||
cp -pR --parents $(cat release/files_tici) $BUILD_DIR/
|
||||
|
||||
# in the directory
|
||||
cd $BUILD_DIR
|
||||
|
||||
rm -f panda/board/obj/panda.bin.signed
|
||||
|
||||
VERSION=$(cat selfdrive/common/version.h | awk -F[\"-] '{print $2}')
|
||||
echo "#define COMMA_VERSION \"$VERSION-release\"" > selfdrive/common/version.h
|
||||
|
||||
echo "[-] committing version $VERSION T=$SECONDS"
|
||||
git add -f .
|
||||
git commit -a -m "openpilot v$VERSION release"
|
||||
|
||||
# Build panda firmware
|
||||
pushd panda/
|
||||
CERT=/data/pandaextra/certs/release RELEASE=1 scons -u .
|
||||
mv board/obj/panda.bin.signed /tmp/panda.bin.signed
|
||||
popd
|
||||
|
||||
# Build
|
||||
export PYTHONPATH="$BUILD_DIR"
|
||||
scons -j$(nproc)
|
||||
|
||||
# Run tests
|
||||
#python selfdrive/manager/test/test_manager.py
|
||||
selfdrive/car/tests/test_car_interfaces.py
|
||||
|
||||
# Cleanup
|
||||
find . -name '*.a' -delete
|
||||
find . -name '*.o' -delete
|
||||
find . -name '*.os' -delete
|
||||
find . -name '*.pyc' -delete
|
||||
find . -name '__pycache__' -delete
|
||||
rm -rf panda/board panda/certs panda/crypto
|
||||
rm -rf .sconsign.dblite Jenkinsfile release/
|
||||
|
||||
# Move back signed panda fw
|
||||
mkdir -p panda/board/obj
|
||||
mv /tmp/panda.bin.signed panda/board/obj/panda.bin.signed
|
||||
|
||||
# Restore phonelibs
|
||||
git checkout phonelibs/
|
||||
|
||||
# Mark as prebuilt release
|
||||
touch prebuilt
|
||||
|
||||
# Add built files to git
|
||||
git add -f .
|
||||
git commit --amend -m "openpilot v$VERSION"
|
||||
|
||||
if [ ! -z "$PUSH" ]; then
|
||||
echo "[-] pushing T=$SECONDS"
|
||||
git remote set-url origin git@github.com:commaai/openpilot.git
|
||||
git push -f origin $BRANCH
|
||||
|
||||
# Create dashcam
|
||||
git rm selfdrive/car/*/carcontroller.py
|
||||
git commit -m "create dashcam release from release"
|
||||
git push -f origin $BRANCH:dashcam3-staging
|
||||
fi
|
||||
|
||||
echo "[-] done T=$SECONDS"
|
||||
12
release/check-submodules.sh
Executable file
@@ -0,0 +1,12 @@
|
||||
#!/bin/bash
|
||||
|
||||
while read hash submodule ref; do
|
||||
git -C $submodule fetch --depth 100 origin master
|
||||
git -C $submodule branch -r --contains $hash | grep "origin/master"
|
||||
if [ "$?" -eq 0 ]; then
|
||||
echo "$submodule ok"
|
||||
else
|
||||
echo "$submodule: $hash is not on master"
|
||||
exit 1
|
||||
fi
|
||||
done <<< $(git submodule status --recursive)
|
||||
622
release/files_common
Normal file
@@ -0,0 +1,622 @@
|
||||
.gitignore
|
||||
LICENSE
|
||||
launch_env.sh
|
||||
launch_chffrplus.sh
|
||||
launch_openpilot.sh
|
||||
|
||||
Jenkinsfile
|
||||
SConstruct
|
||||
|
||||
CONTRIBUTING.md
|
||||
README.md
|
||||
RELEASES.md
|
||||
SAFETY.md
|
||||
site_scons/site_tools/cython.py
|
||||
|
||||
common/.gitignore
|
||||
common/__init__.py
|
||||
common/gpio.py
|
||||
common/realtime.py
|
||||
common/clock.pyx
|
||||
common/timeout.py
|
||||
common/ffi_wrapper.py
|
||||
common/file_helpers.py
|
||||
common/logging_extra.py
|
||||
common/numpy_fast.py
|
||||
common/params.py
|
||||
common/params_pxd.pxd
|
||||
common/params_pyx.pyx
|
||||
common/xattr.py
|
||||
common/profiler.py
|
||||
common/basedir.py
|
||||
common/dict_helpers.py
|
||||
common/filter_simple.py
|
||||
common/stat_live.py
|
||||
common/spinner.py
|
||||
common/text_window.py
|
||||
common/cython_hacks.py
|
||||
common/SConscript
|
||||
|
||||
common/kalman/.gitignore
|
||||
common/kalman/*
|
||||
|
||||
common/transformations/__init__.py
|
||||
common/transformations/camera.py
|
||||
common/transformations/model.py
|
||||
|
||||
common/transformations/SConscript
|
||||
common/transformations/coordinates.py
|
||||
common/transformations/coordinates.cc
|
||||
common/transformations/coordinates.hpp
|
||||
common/transformations/orientation.py
|
||||
common/transformations/orientation.cc
|
||||
common/transformations/orientation.hpp
|
||||
common/transformations/transformations.pxd
|
||||
common/transformations/transformations.pyx
|
||||
|
||||
common/api/__init__.py
|
||||
|
||||
models/supercombo.dlc
|
||||
models/dmonitoring_model_q.dlc
|
||||
|
||||
release/*
|
||||
|
||||
selfdrive/version.py
|
||||
|
||||
selfdrive/__init__.py
|
||||
selfdrive/config.py
|
||||
selfdrive/crash.py
|
||||
selfdrive/swaglog.py
|
||||
selfdrive/logmessaged.py
|
||||
selfdrive/tombstoned.py
|
||||
selfdrive/pandad.py
|
||||
selfdrive/updated.py
|
||||
selfdrive/rtshield.py
|
||||
|
||||
selfdrive/athena/__init__.py
|
||||
selfdrive/athena/athenad.py
|
||||
selfdrive/athena/manage_athenad.py
|
||||
selfdrive/athena/registration.py
|
||||
|
||||
selfdrive/boardd/.gitignore
|
||||
selfdrive/boardd/SConscript
|
||||
selfdrive/boardd/__init__.py
|
||||
selfdrive/boardd/boardd.cc
|
||||
selfdrive/boardd/boardd.py
|
||||
selfdrive/boardd/boardd_api_impl.pyx
|
||||
selfdrive/boardd/can_list_to_can_capnp.cc
|
||||
selfdrive/boardd/panda.cc
|
||||
selfdrive/boardd/panda.h
|
||||
selfdrive/boardd/pigeon.cc
|
||||
selfdrive/boardd/pigeon.h
|
||||
selfdrive/boardd/set_time.py
|
||||
|
||||
selfdrive/car/__init__.py
|
||||
selfdrive/car/car_helpers.py
|
||||
selfdrive/car/fingerprints.py
|
||||
selfdrive/car/interfaces.py
|
||||
selfdrive/car/vin.py
|
||||
selfdrive/car/fw_versions.py
|
||||
selfdrive/car/isotp_parallel_query.py
|
||||
selfdrive/car/tests/__init__.py
|
||||
selfdrive/car/tests/test_car_interfaces.py
|
||||
selfdrive/car/chrysler/__init__.py
|
||||
selfdrive/car/chrysler/carstate.py
|
||||
selfdrive/car/chrysler/interface.py
|
||||
selfdrive/car/chrysler/radar_interface.py
|
||||
selfdrive/car/chrysler/values.py
|
||||
selfdrive/car/chrysler/carcontroller.py
|
||||
selfdrive/car/chrysler/chryslercan.py
|
||||
selfdrive/car/honda/__init__.py
|
||||
selfdrive/car/honda/carstate.py
|
||||
selfdrive/car/honda/interface.py
|
||||
selfdrive/car/honda/radar_interface.py
|
||||
selfdrive/car/honda/values.py
|
||||
selfdrive/car/honda/carcontroller.py
|
||||
selfdrive/car/honda/hondacan.py
|
||||
selfdrive/car/hyundai/__init__.py
|
||||
selfdrive/car/hyundai/carstate.py
|
||||
selfdrive/car/hyundai/interface.py
|
||||
selfdrive/car/hyundai/radar_interface.py
|
||||
selfdrive/car/hyundai/values.py
|
||||
selfdrive/car/hyundai/carcontroller.py
|
||||
selfdrive/car/hyundai/hyundaican.py
|
||||
selfdrive/car/toyota/__init__.py
|
||||
selfdrive/car/toyota/carstate.py
|
||||
selfdrive/car/toyota/interface.py
|
||||
selfdrive/car/toyota/radar_interface.py
|
||||
selfdrive/car/toyota/values.py
|
||||
selfdrive/car/toyota/carcontroller.py
|
||||
selfdrive/car/toyota/toyotacan.py
|
||||
selfdrive/car/nissan/__init__.py
|
||||
selfdrive/car/nissan/carcontroller.py
|
||||
selfdrive/car/nissan/carstate.py
|
||||
selfdrive/car/nissan/interface.py
|
||||
selfdrive/car/nissan/nissancan.py
|
||||
selfdrive/car/nissan/radar_interface.py
|
||||
selfdrive/car/nissan/values.py
|
||||
selfdrive/car/volkswagen/__init__.py
|
||||
selfdrive/car/volkswagen/carstate.py
|
||||
selfdrive/car/volkswagen/interface.py
|
||||
selfdrive/car/volkswagen/radar_interface.py
|
||||
selfdrive/car/volkswagen/values.py
|
||||
selfdrive/car/volkswagen/carcontroller.py
|
||||
selfdrive/car/volkswagen/volkswagencan.py
|
||||
selfdrive/car/gm/__init__.py
|
||||
selfdrive/car/gm/carstate.py
|
||||
selfdrive/car/gm/interface.py
|
||||
selfdrive/car/gm/radar_interface.py
|
||||
selfdrive/car/gm/values.py
|
||||
selfdrive/car/gm/carcontroller.py
|
||||
selfdrive/car/gm/gmcan.py
|
||||
selfdrive/car/ford/__init__.py
|
||||
selfdrive/car/ford/carstate.py
|
||||
selfdrive/car/ford/interface.py
|
||||
selfdrive/car/ford/radar_interface.py
|
||||
selfdrive/car/ford/values.py
|
||||
selfdrive/car/ford/carcontroller.py
|
||||
selfdrive/car/ford/fordcan.py
|
||||
selfdrive/car/subaru/__init__.py
|
||||
selfdrive/car/subaru/carstate.py
|
||||
selfdrive/car/subaru/interface.py
|
||||
selfdrive/car/subaru/radar_interface.py
|
||||
selfdrive/car/subaru/values.py
|
||||
selfdrive/car/subaru/carcontroller.py
|
||||
selfdrive/car/subaru/subarucan.py
|
||||
selfdrive/car/mazda/__init__.py
|
||||
selfdrive/car/mazda/carstate.py
|
||||
selfdrive/car/mazda/interface.py
|
||||
selfdrive/car/mazda/radar_interface.py
|
||||
selfdrive/car/mazda/values.py
|
||||
selfdrive/car/mazda/carcontroller.py
|
||||
selfdrive/car/mazda/mazdacan.py
|
||||
selfdrive/car/tesla/__init__.py
|
||||
selfdrive/car/tesla/teslacan.py
|
||||
selfdrive/car/tesla/carcontroller.py
|
||||
selfdrive/car/tesla/radar_interface.py
|
||||
selfdrive/car/tesla/values.py
|
||||
selfdrive/car/tesla/carstate.py
|
||||
selfdrive/car/tesla/interface.py
|
||||
selfdrive/car/mock/*.py
|
||||
|
||||
selfdrive/clocksd/.gitignore
|
||||
selfdrive/clocksd/SConscript
|
||||
selfdrive/clocksd/clocksd.cc
|
||||
|
||||
selfdrive/debug/*.py
|
||||
|
||||
selfdrive/common/SConscript
|
||||
selfdrive/common/version.h
|
||||
|
||||
selfdrive/common/framebuffer.h
|
||||
selfdrive/common/framebuffer.cc
|
||||
selfdrive/common/glutil.cc
|
||||
selfdrive/common/glutil.h
|
||||
selfdrive/common/touch.[c,h]
|
||||
selfdrive/common/swaglog.h
|
||||
selfdrive/common/swaglog.cc
|
||||
selfdrive/common/util.cc
|
||||
selfdrive/common/util.h
|
||||
selfdrive/common/queue.h
|
||||
selfdrive/common/clutil.cc
|
||||
selfdrive/common/clutil.h
|
||||
selfdrive/common/params.h
|
||||
selfdrive/common/params.cc
|
||||
selfdrive/common/watchdog.cc
|
||||
selfdrive/common/watchdog.h
|
||||
|
||||
selfdrive/common/modeldata.h
|
||||
selfdrive/common/mat.h
|
||||
selfdrive/common/timing.h
|
||||
|
||||
selfdrive/common/visionimg.cc
|
||||
selfdrive/common/visionimg.h
|
||||
|
||||
selfdrive/common/gpio.cc
|
||||
selfdrive/common/gpio.h
|
||||
selfdrive/common/i2c.cc
|
||||
selfdrive/common/i2c.h
|
||||
|
||||
|
||||
selfdrive/controls/__init__.py
|
||||
selfdrive/controls/controlsd.py
|
||||
selfdrive/controls/plannerd.py
|
||||
selfdrive/controls/radard.py
|
||||
selfdrive/controls/lib/__init__.py
|
||||
selfdrive/controls/lib/alertmanager.py
|
||||
selfdrive/controls/lib/alerts_offroad.json
|
||||
selfdrive/controls/lib/events.py
|
||||
selfdrive/controls/lib/drive_helpers.py
|
||||
selfdrive/controls/lib/latcontrol_pid.py
|
||||
selfdrive/controls/lib/latcontrol_indi.py
|
||||
selfdrive/controls/lib/latcontrol_lqr.py
|
||||
selfdrive/controls/lib/latcontrol_angle.py
|
||||
selfdrive/controls/lib/longcontrol.py
|
||||
selfdrive/controls/lib/lateral_planner.py
|
||||
selfdrive/controls/lib/lane_planner.py
|
||||
selfdrive/controls/lib/pid.py
|
||||
selfdrive/controls/lib/longitudinal_planner.py
|
||||
selfdrive/controls/lib/radar_helpers.py
|
||||
selfdrive/controls/lib/vehicle_model.py
|
||||
selfdrive/controls/lib/fcw.py
|
||||
selfdrive/controls/lib/long_mpc.py
|
||||
selfdrive/controls/lib/lead_mpc.py
|
||||
|
||||
selfdrive/controls/lib/cluster/*
|
||||
|
||||
selfdrive/controls/lib/lateral_mpc/lib_mpc_export/*
|
||||
selfdrive/controls/lib/lateral_mpc/.gitignore
|
||||
selfdrive/controls/lib/lateral_mpc/SConscript
|
||||
selfdrive/controls/lib/lateral_mpc/__init__.py
|
||||
selfdrive/controls/lib/lateral_mpc/generator.cpp
|
||||
selfdrive/controls/lib/lateral_mpc/libmpc_py.py
|
||||
selfdrive/controls/lib/lateral_mpc/lateral_mpc.c
|
||||
|
||||
selfdrive/controls/lib/lead_mpc_lib/lib_mpc_export/*
|
||||
selfdrive/controls/lib/lead_mpc_lib/.gitignore
|
||||
selfdrive/controls/lib/lead_mpc_lib/SConscript
|
||||
selfdrive/controls/lib/lead_mpc_lib/__init__.py
|
||||
selfdrive/controls/lib/lead_mpc_lib/generator.cpp
|
||||
selfdrive/controls/lib/lead_mpc_lib/libmpc_py.py
|
||||
selfdrive/controls/lib/lead_mpc_lib/longitudinal_mpc.c
|
||||
|
||||
selfdrive/controls/lib/longitudinal_mpc_lib/lib_mpc_export/*
|
||||
selfdrive/controls/lib/longitudinal_mpc_lib/.gitignore
|
||||
selfdrive/controls/lib/longitudinal_mpc_lib/SConscript
|
||||
selfdrive/controls/lib/longitudinal_mpc_lib/__init__.py
|
||||
selfdrive/controls/lib/longitudinal_mpc_lib/generator.cpp
|
||||
selfdrive/controls/lib/longitudinal_mpc_lib/libmpc_py.py
|
||||
selfdrive/controls/lib/longitudinal_mpc_lib/longitudinal_mpc.c
|
||||
|
||||
selfdrive/hardware/__init__.py
|
||||
selfdrive/hardware/base.h
|
||||
selfdrive/hardware/base.py
|
||||
selfdrive/hardware/hw.h
|
||||
selfdrive/hardware/eon/__init__.py
|
||||
selfdrive/hardware/eon/hardware.h
|
||||
selfdrive/hardware/eon/hardware.py
|
||||
selfdrive/hardware/tici/__init__.py
|
||||
selfdrive/hardware/tici/hardware.py
|
||||
selfdrive/hardware/tici/amplifier.py
|
||||
selfdrive/hardware/tici/iwlist.py
|
||||
selfdrive/hardware/pc/__init__.py
|
||||
selfdrive/hardware/pc/hardware.py
|
||||
|
||||
selfdrive/locationd/__init__.py
|
||||
selfdrive/locationd/.gitignore
|
||||
selfdrive/locationd/SConscript
|
||||
selfdrive/locationd/ubloxd.cc
|
||||
selfdrive/locationd/ublox_msg.cc
|
||||
selfdrive/locationd/ublox_msg.h
|
||||
selfdrive/locationd/generated/ubx.cpp
|
||||
selfdrive/locationd/generated/ubx.h
|
||||
selfdrive/locationd/generated/gps.cpp
|
||||
selfdrive/locationd/generated/gps.h
|
||||
|
||||
selfdrive/locationd/locationd.h
|
||||
selfdrive/locationd/locationd.cc
|
||||
selfdrive/locationd/paramsd.py
|
||||
selfdrive/locationd/models/.gitignore
|
||||
selfdrive/locationd/models/live_kf.py
|
||||
selfdrive/locationd/models/car_kf.py
|
||||
selfdrive/locationd/models/constants.py
|
||||
selfdrive/locationd/models/live_kf.h
|
||||
selfdrive/locationd/models/live_kf.cc
|
||||
|
||||
selfdrive/locationd/calibrationd.py
|
||||
|
||||
selfdrive/logcatd/SConscript
|
||||
selfdrive/logcatd/logcatd_android.cc
|
||||
selfdrive/logcatd/logcatd_systemd.cc
|
||||
|
||||
selfdrive/proclogd/SConscript
|
||||
selfdrive/proclogd/proclogd.cc
|
||||
|
||||
selfdrive/loggerd/SConscript
|
||||
selfdrive/loggerd/encoder.h
|
||||
selfdrive/loggerd/omx_encoder.cc
|
||||
selfdrive/loggerd/omx_encoder.h
|
||||
selfdrive/loggerd/logger.cc
|
||||
selfdrive/loggerd/logger.h
|
||||
selfdrive/loggerd/loggerd.cc
|
||||
selfdrive/loggerd/bootlog.cc
|
||||
selfdrive/loggerd/raw_logger.cc
|
||||
selfdrive/loggerd/raw_logger.h
|
||||
selfdrive/loggerd/include/msm_media_info.h
|
||||
|
||||
selfdrive/loggerd/__init__.py
|
||||
selfdrive/loggerd/config.py
|
||||
selfdrive/loggerd/uploader.py
|
||||
selfdrive/loggerd/deleter.py
|
||||
selfdrive/loggerd/xattr_cache.py
|
||||
|
||||
selfdrive/sensord/SConscript
|
||||
selfdrive/sensord/libdiag.h
|
||||
selfdrive/sensord/sensors_qcom.cc
|
||||
selfdrive/sensord/sensors_qcom2.cc
|
||||
selfdrive/sensord/sensors/*.cc
|
||||
selfdrive/sensord/sensors/*.h
|
||||
selfdrive/sensord/sensord
|
||||
|
||||
selfdrive/thermald/thermald.py
|
||||
selfdrive/thermald/power_monitoring.py
|
||||
|
||||
selfdrive/test/__init__.py
|
||||
selfdrive/test/helpers.py
|
||||
selfdrive/test/setup_device_ci.sh
|
||||
selfdrive/test/test_fingerprints.py
|
||||
selfdrive/test/test_onroad.py
|
||||
|
||||
selfdrive/ui/.gitignore
|
||||
selfdrive/ui/SConscript
|
||||
selfdrive/ui/*.cc
|
||||
selfdrive/ui/*.h
|
||||
selfdrive/ui/ui
|
||||
selfdrive/ui/text
|
||||
selfdrive/ui/spinner
|
||||
selfdrive/ui/soundd
|
||||
|
||||
selfdrive/ui/qt/*.cc
|
||||
selfdrive/ui/qt/*.h
|
||||
selfdrive/ui/qt/offroad/*.cc
|
||||
selfdrive/ui/qt/offroad/*.h
|
||||
selfdrive/ui/qt/offroad/*.qml
|
||||
selfdrive/ui/qt/widgets/*.cc
|
||||
selfdrive/ui/qt/widgets/*.h
|
||||
selfdrive/ui/qt/spinner_aarch64
|
||||
selfdrive/ui/qt/text_aarch64
|
||||
|
||||
selfdrive/camerad/SConscript
|
||||
selfdrive/camerad/main.cc
|
||||
|
||||
selfdrive/camerad/snapshot/*
|
||||
selfdrive/camerad/include/*
|
||||
selfdrive/camerad/cameras/camera_common.h
|
||||
selfdrive/camerad/cameras/camera_common.cc
|
||||
selfdrive/camerad/cameras/camera_frame_stream.cc
|
||||
selfdrive/camerad/cameras/camera_frame_stream.h
|
||||
selfdrive/camerad/cameras/camera_qcom.cc
|
||||
selfdrive/camerad/cameras/camera_qcom.h
|
||||
selfdrive/camerad/cameras/debayer.cl
|
||||
selfdrive/camerad/cameras/sensor_i2c.h
|
||||
selfdrive/camerad/cameras/sensor2_i2c.h
|
||||
|
||||
selfdrive/camerad/transforms/rgb_to_yuv.cc
|
||||
selfdrive/camerad/transforms/rgb_to_yuv.h
|
||||
selfdrive/camerad/transforms/rgb_to_yuv.cl
|
||||
selfdrive/camerad/transforms/rgb_to_yuv_test.cc
|
||||
|
||||
selfdrive/camerad/imgproc/conv.cl
|
||||
selfdrive/camerad/imgproc/pool.cl
|
||||
selfdrive/camerad/imgproc/utils.cc
|
||||
selfdrive/camerad/imgproc/utils.h
|
||||
|
||||
selfdrive/manager/__init__.py
|
||||
selfdrive/manager/build.py
|
||||
selfdrive/manager/helpers.py
|
||||
selfdrive/manager/manager.py
|
||||
selfdrive/manager/process_config.py
|
||||
selfdrive/manager/process.py
|
||||
selfdrive/manager/test/__init__.py
|
||||
selfdrive/manager/test/test_manager.py
|
||||
|
||||
selfdrive/modeld/SConscript
|
||||
selfdrive/modeld/modeld.cc
|
||||
selfdrive/modeld/dmonitoringmodeld.cc
|
||||
selfdrive/modeld/constants.py
|
||||
selfdrive/modeld/modeld
|
||||
selfdrive/modeld/dmonitoringmodeld
|
||||
|
||||
selfdrive/modeld/models/commonmodel.cc
|
||||
selfdrive/modeld/models/commonmodel.h
|
||||
selfdrive/modeld/models/driving.cc
|
||||
selfdrive/modeld/models/driving.h
|
||||
selfdrive/modeld/models/dmonitoring.cc
|
||||
selfdrive/modeld/models/dmonitoring.h
|
||||
|
||||
selfdrive/modeld/transforms/loadyuv.cc
|
||||
selfdrive/modeld/transforms/loadyuv.h
|
||||
selfdrive/modeld/transforms/loadyuv.cl
|
||||
selfdrive/modeld/transforms/transform.cc
|
||||
selfdrive/modeld/transforms/transform.h
|
||||
selfdrive/modeld/transforms/transform.cl
|
||||
|
||||
selfdrive/modeld/thneed/thneed.*
|
||||
selfdrive/modeld/thneed/serialize.cc
|
||||
selfdrive/modeld/thneed/compile.cc
|
||||
selfdrive/modeld/thneed/include/*
|
||||
|
||||
selfdrive/modeld/runners/snpemodel.cc
|
||||
selfdrive/modeld/runners/snpemodel.h
|
||||
selfdrive/modeld/runners/thneedmodel.cc
|
||||
selfdrive/modeld/runners/thneedmodel.h
|
||||
selfdrive/modeld/runners/runmodel.h
|
||||
selfdrive/modeld/runners/run.h
|
||||
|
||||
selfdrive/monitoring/dmonitoringd.py
|
||||
selfdrive/monitoring/driver_monitor.py
|
||||
|
||||
selfdrive/assets/.gitignore
|
||||
selfdrive/assets/assets.qrc
|
||||
selfdrive/assets/*.png
|
||||
selfdrive/assets/*.svg
|
||||
selfdrive/assets/fonts/*.ttf
|
||||
selfdrive/assets/images/*
|
||||
selfdrive/assets/offroad/*
|
||||
selfdrive/assets/sounds/*
|
||||
selfdrive/assets/training/*
|
||||
|
||||
phonelibs/SConscript
|
||||
|
||||
phonelibs/nanovg/*.c
|
||||
phonelibs/nanovg/*.h
|
||||
|
||||
phonelibs/libgralloc/**
|
||||
phonelibs/linux/**
|
||||
phonelibs/opencl/**
|
||||
phonelibs/zlib/*
|
||||
phonelibs/bzip2/*
|
||||
phonelibs/openmax/**
|
||||
|
||||
phonelibs/json11/json11.cpp
|
||||
phonelibs/json11/json11.hpp
|
||||
|
||||
phonelibs/qpoases/**
|
||||
|
||||
phonelibs/qrcode/*.cc
|
||||
phonelibs/qrcode/*.hpp
|
||||
|
||||
phonelibs/kaitai/*.h
|
||||
phonelibs/kaitai/*.cpp
|
||||
|
||||
phonelibs/libyuv/include/**
|
||||
phonelibs/libyuv/lib/**
|
||||
phonelibs/libyuv/larch64/**
|
||||
|
||||
phonelibs/snpe/include/**
|
||||
phonelibs/snpe/aarch64**
|
||||
phonelibs/snpe/larch64**
|
||||
phonelibs/snpe/dsp**
|
||||
|
||||
phonelibs/android_frameworks_native/**
|
||||
phonelibs/android_hardware_libhardware/**
|
||||
phonelibs/android_system_core/**
|
||||
|
||||
installer/updater/updater
|
||||
installer/updater/updater.cc
|
||||
installer/updater/update.json
|
||||
installer/updater/Makefile
|
||||
|
||||
scripts/update_now.sh
|
||||
scripts/stop_updater.sh
|
||||
|
||||
pyextra/.gitignore
|
||||
|
||||
rednose/**
|
||||
|
||||
cereal/.gitignore
|
||||
cereal/__init__.py
|
||||
cereal/car.capnp
|
||||
cereal/legacy.capnp
|
||||
cereal/log.capnp
|
||||
cereal/services.py
|
||||
cereal/SConscript
|
||||
cereal/include/**
|
||||
cereal/messaging/.gitignore
|
||||
cereal/messaging/__init__.py
|
||||
cereal/messaging/bridge.cc
|
||||
cereal/messaging/impl_msgq.cc
|
||||
cereal/messaging/impl_msgq.h
|
||||
cereal/messaging/impl_zmq.cc
|
||||
cereal/messaging/impl_zmq.h
|
||||
cereal/messaging/messaging.cc
|
||||
cereal/messaging/messaging.h
|
||||
cereal/messaging/messaging.pxd
|
||||
cereal/messaging/messaging_pyx.pyx
|
||||
cereal/messaging/msgq.cc
|
||||
cereal/messaging/msgq.h
|
||||
cereal/messaging/socketmaster.cc
|
||||
cereal/visionipc/.gitignore
|
||||
cereal/visionipc/__init__.py
|
||||
cereal/visionipc/*.cc
|
||||
cereal/visionipc/*.h
|
||||
cereal/visionipc/*.pyx
|
||||
cereal/visionipc/*.pxd
|
||||
|
||||
panda/.gitignore
|
||||
panda/__init__.py
|
||||
panda/VERSION
|
||||
panda/board/**
|
||||
panda/certs/**
|
||||
panda/crypto/**
|
||||
panda/examples/query_fw_versions.py
|
||||
panda/python/**
|
||||
|
||||
opendbc/.gitignore
|
||||
opendbc/__init__.py
|
||||
opendbc/can/__init__.py
|
||||
opendbc/can/SConscript
|
||||
opendbc/can/can_define.py
|
||||
opendbc/can/common.cc
|
||||
opendbc/can/common.h
|
||||
opendbc/can/common.pxd
|
||||
opendbc/can/common_dbc.h
|
||||
opendbc/can/dbc.cc
|
||||
opendbc/can/dbc.py
|
||||
opendbc/can/dbc_template.cc
|
||||
opendbc/can/packer.cc
|
||||
opendbc/can/packer.py
|
||||
opendbc/can/packer_pyx.pyx
|
||||
opendbc/can/parser.cc
|
||||
opendbc/can/parser.py
|
||||
opendbc/can/parser_pyx.pyx
|
||||
opendbc/can/process_dbc.py
|
||||
opendbc/can/dbc_out/.gitkeep
|
||||
opendbc/can/dbc_out/.gitignore
|
||||
|
||||
opendbc/chrysler_pacifica_2017_hybrid.dbc
|
||||
opendbc/chrysler_pacifica_2017_hybrid_private_fusion.dbc
|
||||
|
||||
opendbc/gm_global_a_powertrain.dbc
|
||||
opendbc/gm_global_a_object.dbc
|
||||
opendbc/gm_global_a_chassis.dbc
|
||||
|
||||
opendbc/ford_fusion_2018_pt.dbc
|
||||
opendbc/ford_fusion_2018_adas.dbc
|
||||
|
||||
opendbc/honda_accord_2018_can_generated.dbc
|
||||
opendbc/acura_ilx_2016_can_generated.dbc
|
||||
opendbc/acura_rdx_2018_can_generated.dbc
|
||||
opendbc/acura_rdx_2020_can_generated.dbc
|
||||
opendbc/honda_civic_touring_2016_can_generated.dbc
|
||||
opendbc/honda_civic_hatchback_ex_2017_can_generated.dbc
|
||||
opendbc/honda_civic_sedan_16_diesel_2019_can_generated.dbc
|
||||
opendbc/honda_crv_touring_2016_can_generated.dbc
|
||||
opendbc/honda_crv_ex_2017_can_generated.dbc
|
||||
opendbc/honda_crv_ex_2017_body_generated.dbc
|
||||
opendbc/honda_crv_executive_2016_can_generated.dbc
|
||||
opendbc/honda_crv_hybrid_2019_can_generated.dbc
|
||||
opendbc/honda_fit_ex_2018_can_generated.dbc
|
||||
opendbc/honda_hrv_touring_2019_can_generated.dbc
|
||||
opendbc/honda_odyssey_exl_2018_generated.dbc
|
||||
opendbc/honda_odyssey_extreme_edition_2018_china_can_generated.dbc
|
||||
opendbc/honda_pilot_touring_2017_can_generated.dbc
|
||||
opendbc/honda_ridgeline_black_edition_2017_can_generated.dbc
|
||||
opendbc/honda_insight_ex_2019_can_generated.dbc
|
||||
opendbc/acura_ilx_2016_nidec.dbc
|
||||
|
||||
opendbc/hyundai_kia_generic.dbc
|
||||
|
||||
opendbc/mazda_2017.dbc
|
||||
|
||||
opendbc/nissan_x_trail_2017.dbc
|
||||
opendbc/nissan_leaf_2018.dbc
|
||||
|
||||
opendbc/subaru_global_2017_generated.dbc
|
||||
opendbc/subaru_outback_2015_generated.dbc
|
||||
opendbc/subaru_outback_2019_generated.dbc
|
||||
opendbc/subaru_forester_2017_generated.dbc
|
||||
|
||||
opendbc/toyota_rav4_hybrid_2017_pt_generated.dbc
|
||||
opendbc/toyota_rav4_2017_pt_generated.dbc
|
||||
opendbc/toyota_prius_2017_pt_generated.dbc
|
||||
opendbc/toyota_corolla_2017_pt_generated.dbc
|
||||
opendbc/lexus_rx_350_2016_pt_generated.dbc
|
||||
opendbc/lexus_rx_hybrid_2017_pt_generated.dbc
|
||||
opendbc/toyota_nodsu_pt_generated.dbc
|
||||
opendbc/toyota_nodsu_hybrid_pt_generated.dbc
|
||||
opendbc/toyota_camry_hybrid_2018_pt_generated.dbc
|
||||
opendbc/toyota_highlander_2017_pt_generated.dbc
|
||||
opendbc/toyota_highlander_hybrid_2018_pt_generated.dbc
|
||||
opendbc/toyota_avalon_2017_pt_generated.dbc
|
||||
opendbc/toyota_sienna_xle_2018_pt_generated.dbc
|
||||
opendbc/lexus_is_2018_pt_generated.dbc
|
||||
opendbc/lexus_ct200h_2018_pt_generated.dbc
|
||||
opendbc/lexus_nx300h_2018_pt_generated.dbc
|
||||
opendbc/lexus_nx300_2018_pt_generated.dbc
|
||||
opendbc/toyota_adas.dbc
|
||||
opendbc/toyota_tss2_adas.dbc
|
||||
|
||||
opendbc/vw_mqb_2010.dbc
|
||||
|
||||
opendbc/tesla_can.dbc
|
||||
3
release/files_pc
Normal file
@@ -0,0 +1,3 @@
|
||||
phonelibs/mapbox-gl-native-qt/x86_64/**
|
||||
|
||||
phonelibs/qt-plugins/x86_64/**
|
||||
27
release/files_tici
Normal file
@@ -0,0 +1,27 @@
|
||||
installer/continue_openpilot.sh
|
||||
|
||||
phonelibs/mapbox-gl-native-qt/include/*
|
||||
|
||||
selfdrive/timezoned.py
|
||||
|
||||
selfdrive/assets/navigation/*
|
||||
selfdrive/assets/training_wide/*
|
||||
selfdrive/assets/sounds_tici/*
|
||||
|
||||
selfdrive/camerad/cameras/camera_qcom2.cc
|
||||
selfdrive/camerad/cameras/camera_qcom2.h
|
||||
selfdrive/camerad/cameras/real_debayer.cl
|
||||
|
||||
selfdrive/hardware/tici/__init__.py
|
||||
selfdrive/hardware/tici/hardware.h
|
||||
selfdrive/hardware/tici/hardware.py
|
||||
selfdrive/hardware/tici/pins.py
|
||||
selfdrive/hardware/tici/agnos.py
|
||||
selfdrive/hardware/tici/agnos.json
|
||||
selfdrive/hardware/tici/amplifier.py
|
||||
selfdrive/hardware/tici/updater
|
||||
|
||||
selfdrive/ui/qt/spinner_larch64
|
||||
selfdrive/ui/qt/text_larch64
|
||||
selfdrive/ui/qt/maps/*.cc
|
||||
selfdrive/ui/qt/maps/*.h
|
||||
5
release/identity.sh
Normal file
@@ -0,0 +1,5 @@
|
||||
export GIT_COMMITTER_NAME="Vehicle Researcher"
|
||||
export GIT_COMMITTER_EMAIL="user@comma.ai"
|
||||
export GIT_AUTHOR_NAME="Vehicle Researcher"
|
||||
export GIT_AUTHOR_EMAIL="user@comma.ai"
|
||||
export GIT_SSH_COMMAND="ssh -i /data/gitkey"
|
||||
19
scripts/atl.sh
Executable file
@@ -0,0 +1,19 @@
|
||||
#!/usr/bin/bash
|
||||
|
||||
if [ $1 -eq 1 ]; then
|
||||
printf %s "1" > /data/params/d/CommunityFeaturesToggle
|
||||
printf %s "1" > /data/params/d/dp_atl
|
||||
printf %s "0" > /data/params/d/dp_uploader
|
||||
printf %s "0" > /data/params/d/dp_logger
|
||||
printf %s "0" > /data/params/d/dp_athenad
|
||||
printf %s "0" > /data/params/d/dp_accel_profile_ctrl
|
||||
printf %s "0" > /data/params/d/dp_following_profile_ctrl
|
||||
printf %s "0" > /data/params/d/dp_gear_check
|
||||
fi
|
||||
if [ $1 -eq 0 ]; then
|
||||
printf %s "0" > /data/params/d/dp_atl
|
||||
cd /data/openpilot || exit
|
||||
git reset --hard @{u}
|
||||
git clean -xdf
|
||||
fi
|
||||
reboot
|
||||
9
scripts/complete_setup.sh
Executable file
@@ -0,0 +1,9 @@
|
||||
#!/usr/bin/bash
|
||||
|
||||
touch /data/data/com.termux/files/continue.sh
|
||||
echo "#!/usr/bin/bash" >> /data/data/com.termux/files/continue.sh
|
||||
echo "cd /data/openpilot" >> /data/data/com.termux/files/continue.sh
|
||||
echo "exec ./launch_openpilot.sh" >> /data/data/com.termux/files/continue.sh
|
||||
|
||||
chmod u+x /data/data/com.termux/files/continue.sh
|
||||
reboot
|
||||
10
scripts/disable_relay.sh
Executable file
@@ -0,0 +1,10 @@
|
||||
#!/usr/bin/bash
|
||||
|
||||
if [ $1 -eq 1 ]; then
|
||||
printf %s "1" > /data/params/d/dp_toyota_disable_relay
|
||||
fi
|
||||
if [ $1 -eq 0 ]; then
|
||||
printf %s "0" > /data/params/d/dp_toyota_disable_relay
|
||||
fi
|
||||
|
||||
rm -rf /data/openpilot/selfdrive/boardd/boardd && reboot
|
||||
28
scripts/id_rsa
Normal file
@@ -0,0 +1,28 @@
|
||||
-----BEGIN RSA PRIVATE KEY-----
|
||||
MIIEvAIBADANBgkqhkiG9w0BAQEFAASCBKYwggSiAgEAAoIBAQC+iXXq30Tq+J5N
|
||||
Kat3KWHCzcmwZ55nGh6WggAqECa5CasBlM9VeROpVu3beA+5h0MibRgbD4DMtVXB
|
||||
t6gEvZ8nd04E7eLA9LTZyFDZ7SkSOVj4oXOQsT0GnJmKrASW5KslTWqVzTfo2XCt
|
||||
Z+004ikLxmyFeBO8NOcErW1pa8gFdQDToH9FrA7kgysic/XVESTOoe7XlzRoe/eZ
|
||||
acEQ+jtnmFd21A4aEADkk00Ahjr0uKaJiLUAPatxs2icIXWpgYtfqqtaKF23wSt6
|
||||
1OTu6cAwXbOWr3m+IUSRUO0IRzEIQS3z1jfd1svgzSgSSwZ1Lhj4AoKxIEAIc8qJ
|
||||
rO4uymCJAgMBAAECggEBAISFevxHGdoL3Z5xkw6oO5SQKO2GxEeVhRzNgmu/HA+q
|
||||
x8OryqD6O1CWY4037kft6iWxlwiLOdwna2P25ueVM3LxqdQH2KS4DmlCx+kq6FwC
|
||||
gv063fQPMhC9LpWimvaQSPEC7VUPjQlo4tPY6sTTYBUOh0A1ihRm/x7juKuQCWix
|
||||
Cq8C/DVnB1X4mGj+W3nJc5TwVJtgJbbiBrq6PWrhvB/3qmkxHRL7dU2SBb2iNRF1
|
||||
LLY30dJx/cD73UDKNHrlrsjk3UJc29Mp4/MladKvUkRqNwlYxSuAtJV0nZ3+iFkL
|
||||
s3adSTHdJpClQer45R51rFDlVsDz2ZBpb/hRNRoGDuECgYEA6A1EixLq7QYOh3cb
|
||||
Xhyh3W4kpVvA/FPfKH1OMy3ONOD/Y9Oa+M/wthW1wSoRL2n+uuIW5OAhTIvIEivj
|
||||
6bAZsTT3twrvOrvYu9rx9aln4p8BhyvdjeW4kS7T8FP5ol6LoOt2sTP3T1LOuJPO
|
||||
uQvOjlKPKIMh3c3RFNWTnGzMPa0CgYEA0jNiPLxP3A2nrX0keKDI+VHuvOY88gdh
|
||||
0W5BuLMLovOIDk9aQFIbBbMuW1OTjHKv9NK+Lrw+YbCFqOGf1dU/UN5gSyE8lX/Q
|
||||
FsUGUqUZx574nJZnOIcy3ONOnQLcvHAQToLFAGUd7PWgP3CtHkt9hEv2koUwL4vo
|
||||
ikTP1u9Gkc0CgYEA2apoWxPZrY963XLKBxNQecYxNbLFaWq67t3rFnKm9E8BAICi
|
||||
4zUaE5J1tMVi7Vi9iks9Ml9SnNyZRQJKfQ+kaebHXbkyAaPmfv+26rqHKboA0uxA
|
||||
nDOZVwXX45zBkp6g1sdHxJx8JLoGEnkC9eyvSi0C//tRLx86OhLErXwYcNkCf1it
|
||||
VMRKrWYoXJTUNo6tRhvodM88UnnIo3u3CALjhgU4uC1RTMHV4ZCGBwiAOb8GozSl
|
||||
s5YD1E1iKwEULloHnK6BIh6P5v8q7J6uf/xdqoKMjlWBHgq6/roxKvkSPA1DOZ3l
|
||||
jTadcgKFnRUmc+JT9p/ZbCxkA/ALFg8++G+0ghECgYA8vG3M/utweLvq4RI7l7U7
|
||||
b+i2BajfK2OmzNi/xugfeLjY6k2tfQGRuv6ppTjehtji2uvgDWkgjJUgPfZpir3I
|
||||
RsVMUiFgloWGHETOy0Qvc5AwtqTJFLTD1Wza2uBilSVIEsg6Y83Gickh+ejOmEsY
|
||||
6co17RFaAZHwGfCFFjO76Q==
|
||||
-----END RSA PRIVATE KEY-----
|
||||
7
scripts/jetson_start.sh
Executable file
@@ -0,0 +1,7 @@
|
||||
#!/usr/bin/env sh
|
||||
|
||||
sudo echo 5000 > /sys/devices/c250000.i2c/i2c-7/7-0040/iio:device0/crit_current_limit_0
|
||||
sudo nvpmodel -m 2 && sudo jetson_clocks
|
||||
# available freq: 1651200 1728000 1804800 1881600 1907200
|
||||
for i in /sys/devices/system/cpu/cpu*/cpufreq/scaling_max_freq; do echo 1907200 > $i; done
|
||||
cd /home/openpilot/openpilot/selfdrive/manager && PASSIVE=0 NOSENSOR=1 USE_MIPI=1 ./manager.py
|
||||
11
scripts/oneplus_update_neos.sh
Executable file
@@ -0,0 +1,11 @@
|
||||
#!/usr/bin/bash
|
||||
|
||||
if [ -z "$BASEDIR" ]; then
|
||||
BASEDIR="/data/openpilot"
|
||||
fi
|
||||
|
||||
source "$BASEDIR/launch_env.sh"
|
||||
cp -f "$BASEDIR/installer/updater/update.zip" "/sdcard/update.zip"
|
||||
pm disable ai.comma.plus.offroad
|
||||
killall _ui
|
||||
"$BASEDIR/installer/updater/updater" "file://$BASEDIR/installer/updater/oneplus.json"
|
||||
13
scripts/rebuild.sh
Executable file
@@ -0,0 +1,13 @@
|
||||
#!/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
|
||||
printf %s "1" > /data/params/d/DragonUpdating
|
||||
cd /data/openpilot || exit
|
||||
#git reset --hard @{u}
|
||||
git clean -xdf
|
||||
rm -fr /tmp/scons_cache/
|
||||
find . -type f -name '*.py[co]' -delete -o -type d -name __pycache__ -delete
|
||||
scons --clean
|
||||
reboot
|
||||
9
scripts/reset_dp.sh
Executable file
@@ -0,0 +1,9 @@
|
||||
#!/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
|
||||
rm -fr /data/params/d/dp_*
|
||||
rm -fr /data/params/d/Dragon*
|
||||
reboot
|
||||
8
scripts/reset_update.sh
Executable file
@@ -0,0 +1,8 @@
|
||||
#!/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
|
||||
rm /data/openpilot/panda/board/obj/panda.bin
|
||||
cd /data/openpilot && git fetch --all && git reset --hard @{u} && git clean -xdf && scons --clean && reboot
|
||||
58
scripts/reset_usb.py
Normal file
@@ -0,0 +1,58 @@
|
||||
#!/usr/bin/env python
|
||||
import os
|
||||
import sys
|
||||
from subprocess import Popen, PIPE
|
||||
import fcntl
|
||||
|
||||
def create_usb_list():
|
||||
device_list = list()
|
||||
try:
|
||||
lsusb_out = Popen('lsusb -v', shell=True, bufsize=64, stdin=PIPE, stdout=PIPE, close_fds=True).stdout.read().strip().decode('utf-8')
|
||||
usb_devices = lsusb_out.split('%s%s' % (os.linesep, os.linesep))
|
||||
for device_categories in usb_devices:
|
||||
if not device_categories:
|
||||
continue
|
||||
categories = device_categories.split(os.linesep)
|
||||
device_stuff = categories[0].strip().split()
|
||||
bus = device_stuff[1]
|
||||
device = device_stuff[3][:-1]
|
||||
device_dict = {'bus': bus, 'device': device}
|
||||
device_info = ' '.join(device_stuff[6:])
|
||||
device_dict['description'] = device_info
|
||||
for category in categories:
|
||||
if not category:
|
||||
continue
|
||||
categoryinfo = category.strip().split()
|
||||
if categoryinfo[0] == 'iManufacturer':
|
||||
manufacturer_info = ' '.join(categoryinfo[2:])
|
||||
device_dict['manufacturer'] = manufacturer_info
|
||||
if categoryinfo[0] == 'iProduct':
|
||||
device_info = ' '.join(categoryinfo[2:])
|
||||
device_dict['device'] = device_info
|
||||
path = '/dev/bus/usb/%s/%s' % (bus, device)
|
||||
device_dict['path'] = path
|
||||
|
||||
device_list.append(device_dict)
|
||||
except Exception as ex:
|
||||
print('Failed to list usb devices! Error: %s' % ex)
|
||||
sys.exit(-1)
|
||||
return device_list
|
||||
|
||||
|
||||
def kill_usb(dev_path):
|
||||
USBDEVFS_RESET = 21780
|
||||
try:
|
||||
f = open(dev_path, 'w', os.O_WRONLY)
|
||||
fcntl.ioctl(f, USBDEVFS_RESET, 0)
|
||||
print('Successfully reset %s' % dev_path)
|
||||
sys.exit(0)
|
||||
except Exception as ex:
|
||||
print('Failed to reset device! Error: %s' % ex)
|
||||
sys.exit(-1)
|
||||
|
||||
if __name__ == "__main__":
|
||||
usb_list = create_usb_list()
|
||||
for device in usb_list:
|
||||
if device['manufacturer'] == 'comma.ai':
|
||||
kill_usb(device['path'])
|
||||
sys.exit(0)
|
||||
8
scripts/update_panda_firmware.sh
Executable file
@@ -0,0 +1,8 @@
|
||||
#!/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/python
|
||||
export PYTHONPATH=/data/openpilot
|
||||
rm /data/openpilot/panda/board/obj/panda.bin
|
||||
cd /data/openpilot/panda || exit ; pkill -f boardd ; python -c "from panda import Panda; Panda().flash()" && reboot
|
||||
9
scripts/vw.sh
Executable file
@@ -0,0 +1,9 @@
|
||||
#!/usr/bin/bash
|
||||
|
||||
if [ $1 -eq 1 ]; then
|
||||
printf %s "1" > /data/params/d/dp_vw_panda
|
||||
fi
|
||||
if [ $1 -eq 0 ]; then
|
||||
printf %s "0" > /data/params/d/dp_vw_panda
|
||||
fi
|
||||
rm /data/openpilot/panda/board/obj/panda.bin
|
||||
1
selfdrive/assets/.gitignore
vendored
Normal file
@@ -0,0 +1 @@
|
||||
*.cc
|
||||
15
selfdrive/assets/assets.qrc
Normal file
@@ -0,0 +1,15 @@
|
||||
<!DOCTYPE RCC><RCC version="1.0">
|
||||
<qresource>
|
||||
<file>img_continue_triangle.svg</file>
|
||||
<file>img_circled_check.svg</file>
|
||||
<file>img_circled_slash.svg</file>
|
||||
<file>img_eye_open.svg</file>
|
||||
<file>img_eye_closed.svg</file>
|
||||
<file>offroad/icon_lock_closed.svg</file>
|
||||
<file>offroad/icon_checkmark.svg</file>
|
||||
<file>offroad/icon_wifi_strength_low.svg</file>
|
||||
<file>offroad/icon_wifi_strength_medium.svg</file>
|
||||
<file>offroad/icon_wifi_strength_high.svg</file>
|
||||
<file>offroad/icon_wifi_strength_full.svg</file>
|
||||
</qresource>
|
||||
</RCC>
|
||||
|
Before Width: | Height: | Size: 1.5 KiB After Width: | Height: | Size: 86 KiB |
4
selfdrive/assets/img_circled_check.svg
Normal file
@@ -0,0 +1,4 @@
|
||||
<svg width="104" height="104" viewBox="0 0 104 104" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M76.3 36L43.8 67.7L28 51.9" stroke="white" stroke-width="7" stroke-miterlimit="10" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
<path d="M52 101.5C79.3381 101.5 101.5 79.3381 101.5 52C101.5 24.6619 79.3381 2.5 52 2.5C24.6619 2.5 2.5 24.6619 2.5 52C2.5 79.3381 24.6619 101.5 52 101.5Z" stroke="white" stroke-width="5"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 439 B |
4
selfdrive/assets/img_circled_slash.svg
Normal file
@@ -0,0 +1,4 @@
|
||||
<svg width="104" height="104" viewBox="0 0 104 104" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M52 98C77.4051 98 98 77.4051 98 52C98 26.5949 77.4051 6 52 6C26.5949 6 6 26.5949 6 52C6 77.4051 26.5949 98 52 98Z" stroke="#696969" stroke-width="12"/>
|
||||
<path d="M19 85L85 19" stroke="#696969" stroke-width="12"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 328 B |
3
selfdrive/assets/img_continue_triangle.svg
Normal file
@@ -0,0 +1,3 @@
|
||||
<svg width="54" height="106" viewBox="0 0 54 106" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M4.01946 4.01488L47.249 54.0666L6.1184 102.141" stroke="white" stroke-width="10"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 197 B |
5
selfdrive/assets/img_eye_closed.svg
Normal file
@@ -0,0 +1,5 @@
|
||||
<svg width="81" height="54" viewBox="0 0 81 54" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M56.4845 7.63065C51.7905 6.01921 46.5684 5 40.8516 5C23.3024 5 10.5368 14.4989 3.27501 21.356C-0.113807 24.5209 -0.113807 29.4791 3.27501 32.644C5.49715 34.7423 8.23466 37.088 11.4669 39.3332L16.0284 36.1208C11.8215 33.3047 8.50721 30.4206 6.47928 28.5297C5.63207 27.6857 5.63207 26.5253 6.47928 25.6813C11.6835 20.7231 25.4809 9.32967 40.8516 9.32967C44.5542 9.32967 48.1656 9.99692 51.5875 11.0793L56.4845 7.63065ZM70.3373 14.7537L65.6283 18.0699C69.8565 20.9236 73.194 23.8528 75.2239 25.7868C75.9501 26.5253 75.9501 27.5802 75.2239 28.3187C70.0197 33.2769 56.3434 44.7758 40.8516 44.7758C37.1452 44.7758 33.5427 44.1237 30.1353 43.0649L25.3547 46.4316C30.0041 48.0071 35.1778 49 40.8516 49C58.4009 49 71.2875 39.5011 78.5492 32.433C81.817 29.2681 81.817 24.5209 78.5492 21.4615C76.3287 19.3647 73.5822 17.0111 70.3373 14.7537Z" fill="#BDBDBD"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M46.1473 14.9103C44.5479 14.113 42.757 13.6667 40.8663 13.6667C34.0916 13.6667 28.5996 19.3974 28.5996 26.4667C28.5996 26.7303 28.6073 26.9922 28.6223 27.2519L46.1473 14.9103ZM36.6377 38.4858C37.9559 38.9909 39.3802 39.2667 40.8663 39.2667C47.5104 39.2667 52.9208 33.7546 53.1269 26.8737L36.6377 38.4858Z" fill="#BDBDBD"/>
|
||||
<line x1="73.2745" y1="4.18015" x2="7.18015" y2="50.7255" stroke="#BDBDBD" stroke-width="6" stroke-linecap="round"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 1.5 KiB |
4
selfdrive/assets/img_eye_open.svg
Normal file
@@ -0,0 +1,4 @@
|
||||
<svg width="81" height="44" viewBox="0 0 81 44" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<ellipse cx="40.8663" cy="21.4667" rx="12.2667" ry="12.8" fill="#BDBDBD"/>
|
||||
<path d="M40.8516 44C23.3024 44 10.5368 34.5011 3.27501 27.644C-0.113807 24.4791 -0.113807 19.5209 3.27501 16.356C10.5368 9.4989 23.3024 0 40.8516 0C58.4009 0 71.2875 9.6044 78.5492 16.4615C81.817 19.5209 81.817 24.2681 78.5492 27.433C71.2875 34.5011 58.4009 44 40.8516 44ZM6.47928 20.6813C5.63207 21.5253 5.63207 22.6857 6.47928 23.5297C11.6835 28.3824 25.3598 39.7758 40.8516 39.7758C56.3434 39.7758 70.0197 28.2769 75.2239 23.3187C75.9501 22.5802 75.9501 21.5253 75.2239 20.7868C70.0197 15.8286 56.2223 4.32967 40.8516 4.32967C25.4809 4.32967 11.6835 15.7231 6.47928 20.6813Z" fill="#BDBDBD"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 775 B |
|
Before Width: | Height: | Size: 15 KiB After Width: | Height: | Size: 86 KiB |
|
Before Width: | Height: | Size: 40 KiB After Width: | Height: | Size: 5.9 KiB |
540
selfdrive/assets/locales/events.pot
Normal file
@@ -0,0 +1,540 @@
|
||||
# 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-10-15 13:37+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: \n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=CHARSET\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:153
|
||||
msgid "openpilot Unavailable"
|
||||
msgstr ""
|
||||
|
||||
#: selfdrive/controls/lib/events.py:160 selfdrive/controls/lib/events.py:167
|
||||
msgid "TAKE CONTROL IMMEDIATELY"
|
||||
msgstr ""
|
||||
|
||||
#: selfdrive/controls/lib/events.py:187 selfdrive/controls/lib/events.py:328
|
||||
#: selfdrive/controls/lib/events.py:354 selfdrive/controls/lib/events.py:418
|
||||
#: selfdrive/controls/lib/events.py:470 selfdrive/controls/lib/events.py:522
|
||||
#: selfdrive/controls/lib/events.py:532
|
||||
msgid "TAKE CONTROL"
|
||||
msgstr ""
|
||||
|
||||
#: selfdrive/controls/lib/events.py:188
|
||||
#, python-format
|
||||
msgid "Steer Unavailable Below %(speed)d %(unit)s"
|
||||
msgstr ""
|
||||
|
||||
#: selfdrive/controls/lib/events.py:196
|
||||
#, python-format
|
||||
msgid "Calibration in Progress: %d%%"
|
||||
msgstr ""
|
||||
|
||||
#: selfdrive/controls/lib/events.py:197
|
||||
#, python-format
|
||||
msgid "Drive Above %(speed)d %(unit)s"
|
||||
msgstr ""
|
||||
|
||||
#: selfdrive/controls/lib/events.py:204
|
||||
msgid "Poor GPS reception"
|
||||
msgstr ""
|
||||
|
||||
#: selfdrive/controls/lib/events.py:205
|
||||
msgid "If sky is visible, contact support"
|
||||
msgstr ""
|
||||
|
||||
#: selfdrive/controls/lib/events.py:205
|
||||
msgid "Check GPS antenna placement"
|
||||
msgstr ""
|
||||
|
||||
#: selfdrive/controls/lib/events.py:210
|
||||
msgid "Cruise Mode Disabled"
|
||||
msgstr ""
|
||||
|
||||
#: selfdrive/controls/lib/events.py:212
|
||||
msgid "Main Switch Off"
|
||||
msgstr ""
|
||||
|
||||
#: selfdrive/controls/lib/events.py:222
|
||||
msgid "DEBUG ALERT"
|
||||
msgstr ""
|
||||
|
||||
#: selfdrive/controls/lib/events.py:230
|
||||
msgid "Be ready to take over at any time"
|
||||
msgstr ""
|
||||
|
||||
#: selfdrive/controls/lib/events.py:231 selfdrive/controls/lib/events.py:239
|
||||
#: selfdrive/controls/lib/events.py:247 selfdrive/controls/lib/events.py:255
|
||||
msgid "Always keep hands on wheel and eyes on road"
|
||||
msgstr ""
|
||||
|
||||
#: selfdrive/controls/lib/events.py:238
|
||||
msgid "WARNING: This branch is not tested"
|
||||
msgstr ""
|
||||
|
||||
#: selfdrive/controls/lib/events.py:246
|
||||
msgid "Dashcam mode"
|
||||
msgstr ""
|
||||
|
||||
#: selfdrive/controls/lib/events.py:254
|
||||
msgid "Dashcam mode for unsupported car"
|
||||
msgstr ""
|
||||
|
||||
#: selfdrive/controls/lib/events.py:262
|
||||
msgid "Unsupported Giraffe Configuration"
|
||||
msgstr ""
|
||||
|
||||
#: selfdrive/controls/lib/events.py:263
|
||||
msgid "Visit comma.ai/tg"
|
||||
msgstr ""
|
||||
|
||||
#: selfdrive/controls/lib/events.py:270
|
||||
msgid "White Panda Is No Longer Supported"
|
||||
msgstr ""
|
||||
|
||||
#: selfdrive/controls/lib/events.py:271
|
||||
msgid "Upgrade to comma two or black panda"
|
||||
msgstr ""
|
||||
|
||||
#: selfdrive/controls/lib/events.py:274
|
||||
msgid "White panda is no longer supported"
|
||||
msgstr ""
|
||||
|
||||
#: selfdrive/controls/lib/events.py:279
|
||||
msgid "Stock LKAS is turned on"
|
||||
msgstr ""
|
||||
|
||||
#: selfdrive/controls/lib/events.py:280
|
||||
msgid "Turn off stock LKAS to engage"
|
||||
msgstr ""
|
||||
|
||||
#: selfdrive/controls/lib/events.py:288
|
||||
msgid "Community Feature Detected"
|
||||
msgstr ""
|
||||
|
||||
#: selfdrive/controls/lib/events.py:289
|
||||
msgid "Enable Community Features in Developer Settings"
|
||||
msgstr ""
|
||||
|
||||
#: selfdrive/controls/lib/events.py:296
|
||||
msgid "Dashcam Mode"
|
||||
msgstr ""
|
||||
|
||||
#: selfdrive/controls/lib/events.py:297
|
||||
msgid "Car Unrecognized"
|
||||
msgstr ""
|
||||
|
||||
#: selfdrive/controls/lib/events.py:304 selfdrive/controls/lib/events.py:312
|
||||
#: selfdrive/controls/lib/events.py:320
|
||||
msgid "BRAKE!"
|
||||
msgstr ""
|
||||
|
||||
#: selfdrive/controls/lib/events.py:305
|
||||
msgid "Stock AEB: Risk of Collision"
|
||||
msgstr ""
|
||||
|
||||
#: selfdrive/controls/lib/events.py:313
|
||||
msgid "Stock FCW: Risk of Collision"
|
||||
msgstr ""
|
||||
|
||||
#: selfdrive/controls/lib/events.py:321
|
||||
msgid "Risk of Collision"
|
||||
msgstr ""
|
||||
|
||||
#: selfdrive/controls/lib/events.py:329
|
||||
msgid "Lane Departure Detected"
|
||||
msgstr ""
|
||||
|
||||
#: selfdrive/controls/lib/events.py:338
|
||||
msgid "openpilot will not brake while gas pressed"
|
||||
msgstr ""
|
||||
|
||||
#: selfdrive/controls/lib/events.py:346
|
||||
msgid "Vehicle Parameter Identification Failed"
|
||||
msgstr ""
|
||||
|
||||
#: selfdrive/controls/lib/events.py:355 selfdrive/controls/lib/events.py:523
|
||||
#: selfdrive/controls/lib/events.py:526
|
||||
msgid "Steering Temporarily Unavailable"
|
||||
msgstr ""
|
||||
|
||||
#: selfdrive/controls/lib/events.py:362
|
||||
msgid "KEEP EYES ON ROAD: Driver Distracted"
|
||||
msgstr ""
|
||||
|
||||
#: selfdrive/controls/lib/events.py:370
|
||||
msgid "KEEP EYES ON ROAD"
|
||||
msgstr ""
|
||||
|
||||
#: selfdrive/controls/lib/events.py:371
|
||||
msgid "Driver Appears Distracted"
|
||||
msgstr ""
|
||||
|
||||
#: selfdrive/controls/lib/events.py:378 selfdrive/controls/lib/events.py:402
|
||||
msgid "DISENGAGE IMMEDIATELY"
|
||||
msgstr ""
|
||||
|
||||
#: selfdrive/controls/lib/events.py:379
|
||||
msgid "Driver Was Distracted"
|
||||
msgstr ""
|
||||
|
||||
#: selfdrive/controls/lib/events.py:386
|
||||
msgid "TOUCH STEERING WHEEL: No Face Detected"
|
||||
msgstr ""
|
||||
|
||||
#: selfdrive/controls/lib/events.py:394
|
||||
msgid "TOUCH STEERING WHEEL"
|
||||
msgstr ""
|
||||
|
||||
#: selfdrive/controls/lib/events.py:395
|
||||
msgid "Driver Is Unresponsive"
|
||||
msgstr ""
|
||||
|
||||
#: selfdrive/controls/lib/events.py:403
|
||||
msgid "Driver Was Unresponsive"
|
||||
msgstr ""
|
||||
|
||||
#: selfdrive/controls/lib/events.py:410
|
||||
msgid "CHECK DRIVER FACE VISIBILITY"
|
||||
msgstr ""
|
||||
|
||||
#: selfdrive/controls/lib/events.py:411
|
||||
msgid "Driver Monitor Model Output Uncertain"
|
||||
msgstr ""
|
||||
|
||||
#: selfdrive/controls/lib/events.py:419
|
||||
msgid "Resume Driving Manually"
|
||||
msgstr ""
|
||||
|
||||
#: selfdrive/controls/lib/events.py:426
|
||||
msgid "STOPPED"
|
||||
msgstr ""
|
||||
|
||||
#: selfdrive/controls/lib/events.py:427
|
||||
msgid "Press Resume to Move"
|
||||
msgstr ""
|
||||
|
||||
#: selfdrive/controls/lib/events.py:438
|
||||
msgid "Steer Left to Start Lane Change"
|
||||
msgstr ""
|
||||
|
||||
#: selfdrive/controls/lib/events.py:439 selfdrive/controls/lib/events.py:447
|
||||
#: selfdrive/controls/lib/events.py:455 selfdrive/controls/lib/events.py:463
|
||||
#: selfdrive/controls/lib/events.py:802 selfdrive/controls/lib/events.py:810
|
||||
msgid "Monitor Other Vehicles"
|
||||
msgstr ""
|
||||
|
||||
#: selfdrive/controls/lib/events.py:446
|
||||
msgid "Steer Right to Start Lane Change"
|
||||
msgstr ""
|
||||
|
||||
#: selfdrive/controls/lib/events.py:454
|
||||
msgid "Car Detected in Blindspot"
|
||||
msgstr ""
|
||||
|
||||
#: selfdrive/controls/lib/events.py:462
|
||||
msgid "Changing Lane"
|
||||
msgstr ""
|
||||
|
||||
#: selfdrive/controls/lib/events.py:471
|
||||
msgid "Turn Exceeds Steering Limit"
|
||||
msgstr ""
|
||||
|
||||
#: selfdrive/controls/lib/events.py:496
|
||||
msgid "Brake Hold Active"
|
||||
msgstr ""
|
||||
|
||||
#: selfdrive/controls/lib/events.py:501
|
||||
msgid "Park Brake Engaged"
|
||||
msgstr ""
|
||||
|
||||
#: selfdrive/controls/lib/events.py:506
|
||||
msgid "Pedal Pressed During Attempt"
|
||||
msgstr ""
|
||||
|
||||
#: selfdrive/controls/lib/events.py:517
|
||||
msgid "Enable Adaptive Cruise"
|
||||
msgstr ""
|
||||
|
||||
#: selfdrive/controls/lib/events.py:533
|
||||
msgid "Attempting Refocus: Camera Focus Invalid"
|
||||
msgstr ""
|
||||
|
||||
#: selfdrive/controls/lib/events.py:539
|
||||
msgid "Out of Storage Space"
|
||||
msgstr ""
|
||||
|
||||
#: selfdrive/controls/lib/events.py:544
|
||||
msgid "Speed Too Low"
|
||||
msgstr ""
|
||||
|
||||
#: selfdrive/controls/lib/events.py:549 selfdrive/controls/lib/events.py:553
|
||||
msgid "NEOS Update Required"
|
||||
msgstr ""
|
||||
|
||||
#: selfdrive/controls/lib/events.py:550
|
||||
msgid "Please Wait for Update"
|
||||
msgstr ""
|
||||
|
||||
#: selfdrive/controls/lib/events.py:558 selfdrive/controls/lib/events.py:562
|
||||
msgid "No Data from Device Sensors"
|
||||
msgstr ""
|
||||
|
||||
#: selfdrive/controls/lib/events.py:559 selfdrive/controls/lib/events.py:572
|
||||
#: selfdrive/controls/lib/events.py:669
|
||||
msgid "Reboot your Device"
|
||||
msgstr ""
|
||||
|
||||
#: selfdrive/controls/lib/events.py:571 selfdrive/controls/lib/events.py:575
|
||||
msgid "Speaker not found"
|
||||
msgstr ""
|
||||
|
||||
#: selfdrive/controls/lib/events.py:579
|
||||
msgid "Distraction Level Too High"
|
||||
msgstr ""
|
||||
|
||||
#: selfdrive/controls/lib/events.py:583
|
||||
msgid "System Overheated"
|
||||
msgstr ""
|
||||
|
||||
#: selfdrive/controls/lib/events.py:584
|
||||
msgid "System overheated"
|
||||
msgstr ""
|
||||
|
||||
#: selfdrive/controls/lib/events.py:588 selfdrive/controls/lib/events.py:589
|
||||
msgid "Gear not D"
|
||||
msgstr ""
|
||||
|
||||
#: selfdrive/controls/lib/events.py:594
|
||||
msgid "Calibration Invalid"
|
||||
msgstr ""
|
||||
|
||||
#: selfdrive/controls/lib/events.py:595
|
||||
msgid "Reposition Device and Recalibrate"
|
||||
msgstr ""
|
||||
|
||||
#: selfdrive/controls/lib/events.py:598 selfdrive/controls/lib/events.py:599
|
||||
msgid "Calibration Invalid: Reposition Device & Recalibrate"
|
||||
msgstr ""
|
||||
|
||||
#: selfdrive/controls/lib/events.py:603 selfdrive/controls/lib/events.py:605
|
||||
msgid "Calibration in Progress"
|
||||
msgstr ""
|
||||
|
||||
#: selfdrive/controls/lib/events.py:609
|
||||
msgid "Door Open"
|
||||
msgstr ""
|
||||
|
||||
#: selfdrive/controls/lib/events.py:610
|
||||
msgid "Door open"
|
||||
msgstr ""
|
||||
|
||||
#: selfdrive/controls/lib/events.py:614
|
||||
msgid "Seatbelt Unlatched"
|
||||
msgstr ""
|
||||
|
||||
#: selfdrive/controls/lib/events.py:615
|
||||
msgid "Seatbelt unlatched"
|
||||
msgstr ""
|
||||
|
||||
#: selfdrive/controls/lib/events.py:619 selfdrive/controls/lib/events.py:620
|
||||
msgid "ESP Off"
|
||||
msgstr ""
|
||||
|
||||
#: selfdrive/controls/lib/events.py:624 selfdrive/controls/lib/events.py:625
|
||||
msgid "Low Battery"
|
||||
msgstr ""
|
||||
|
||||
#: selfdrive/controls/lib/events.py:629 selfdrive/controls/lib/events.py:630
|
||||
msgid "Communication Issue between Processes"
|
||||
msgstr ""
|
||||
|
||||
#: selfdrive/controls/lib/events.py:635 selfdrive/controls/lib/events.py:636
|
||||
msgid "Radar Communication Issue"
|
||||
msgstr ""
|
||||
|
||||
#: selfdrive/controls/lib/events.py:641 selfdrive/controls/lib/events.py:642
|
||||
#: selfdrive/controls/lib/events.py:646 selfdrive/controls/lib/events.py:647
|
||||
msgid "Radar Error: Restart the Car"
|
||||
msgstr ""
|
||||
|
||||
#: selfdrive/controls/lib/events.py:651 selfdrive/controls/lib/events.py:652
|
||||
msgid "Driving model lagging"
|
||||
msgstr ""
|
||||
|
||||
#: selfdrive/controls/lib/events.py:656 selfdrive/controls/lib/events.py:657
|
||||
msgid "Vision Model Output Uncertain"
|
||||
msgstr ""
|
||||
|
||||
#: selfdrive/controls/lib/events.py:661 selfdrive/controls/lib/events.py:662
|
||||
msgid "Device Fell Off Mount"
|
||||
msgstr ""
|
||||
|
||||
#: selfdrive/controls/lib/events.py:666 selfdrive/controls/lib/events.py:672
|
||||
msgid "Low Memory: Reboot Your Device"
|
||||
msgstr ""
|
||||
|
||||
#: selfdrive/controls/lib/events.py:668
|
||||
msgid "RAM Critically Low"
|
||||
msgstr ""
|
||||
|
||||
#: selfdrive/controls/lib/events.py:677 selfdrive/controls/lib/events.py:678
|
||||
msgid "Controls Failed"
|
||||
msgstr ""
|
||||
|
||||
#: selfdrive/controls/lib/events.py:682
|
||||
msgid "Controls Mismatch"
|
||||
msgstr ""
|
||||
|
||||
#: selfdrive/controls/lib/events.py:686 selfdrive/controls/lib/events.py:688
|
||||
#: selfdrive/controls/lib/events.py:692
|
||||
msgid "CAN Error: Check Connections"
|
||||
msgstr ""
|
||||
|
||||
#: selfdrive/controls/lib/events.py:696 selfdrive/controls/lib/events.py:702
|
||||
msgid "LKAS Fault: Restart the Car"
|
||||
msgstr ""
|
||||
|
||||
#: selfdrive/controls/lib/events.py:698
|
||||
msgid "LKAS Fault: Restart the car to engage"
|
||||
msgstr ""
|
||||
|
||||
#: selfdrive/controls/lib/events.py:706 selfdrive/controls/lib/events.py:712
|
||||
#: selfdrive/controls/lib/events.py:795
|
||||
msgid "Cruise Fault: Restart the Car"
|
||||
msgstr ""
|
||||
|
||||
#: selfdrive/controls/lib/events.py:708 selfdrive/controls/lib/events.py:791
|
||||
msgid "Cruise Fault: Restart the car to engage"
|
||||
msgstr ""
|
||||
|
||||
#: selfdrive/controls/lib/events.py:716
|
||||
msgid "Gas Fault: Restart the Car"
|
||||
msgstr ""
|
||||
|
||||
#: selfdrive/controls/lib/events.py:717
|
||||
msgid "Gas Error: Restart the Car"
|
||||
msgstr ""
|
||||
|
||||
#: selfdrive/controls/lib/events.py:722
|
||||
msgid ""
|
||||
"Reverse\n"
|
||||
"Gear"
|
||||
msgstr ""
|
||||
|
||||
#: selfdrive/controls/lib/events.py:726
|
||||
msgid "Reverse Gear"
|
||||
msgstr ""
|
||||
|
||||
#: selfdrive/controls/lib/events.py:731
|
||||
msgid "Cruise Is Off"
|
||||
msgstr ""
|
||||
|
||||
#: selfdrive/controls/lib/events.py:735 selfdrive/controls/lib/events.py:736
|
||||
msgid "Planner Solution Error"
|
||||
msgstr ""
|
||||
|
||||
#: selfdrive/controls/lib/events.py:740 selfdrive/controls/lib/events.py:742
|
||||
#: selfdrive/controls/lib/events.py:746
|
||||
msgid "Harness Malfunction"
|
||||
msgstr ""
|
||||
|
||||
#: selfdrive/controls/lib/events.py:743
|
||||
msgid "Please Check Hardware"
|
||||
msgstr ""
|
||||
|
||||
#: selfdrive/controls/lib/events.py:751 selfdrive/controls/lib/events.py:760
|
||||
msgid "openpilot Canceled"
|
||||
msgstr ""
|
||||
|
||||
#: selfdrive/controls/lib/events.py:752
|
||||
msgid "No close lead car"
|
||||
msgstr ""
|
||||
|
||||
#: selfdrive/controls/lib/events.py:755
|
||||
msgid "No Close Lead Car"
|
||||
msgstr ""
|
||||
|
||||
#: selfdrive/controls/lib/events.py:761
|
||||
msgid "Speed too low"
|
||||
msgstr ""
|
||||
|
||||
#: selfdrive/controls/lib/events.py:768 selfdrive/controls/lib/events.py:773
|
||||
msgid "Speed Too High"
|
||||
msgstr ""
|
||||
|
||||
#: selfdrive/controls/lib/events.py:769
|
||||
msgid "Slow down to resume operation"
|
||||
msgstr ""
|
||||
|
||||
#: selfdrive/controls/lib/events.py:774
|
||||
msgid "Slow down to engage"
|
||||
msgstr ""
|
||||
|
||||
#: selfdrive/controls/lib/events.py:781
|
||||
msgid "Please connect to Internet"
|
||||
msgstr ""
|
||||
|
||||
#: selfdrive/controls/lib/events.py:782
|
||||
msgid "An Update Check Is Required to Engage"
|
||||
msgstr ""
|
||||
|
||||
#: selfdrive/controls/lib/events.py:785
|
||||
msgid "Please Connect to Internet"
|
||||
msgstr ""
|
||||
|
||||
#: selfdrive/controls/lib/events.py:801
|
||||
msgid "Left ALC will start in 3s"
|
||||
msgstr ""
|
||||
|
||||
#: selfdrive/controls/lib/events.py:809
|
||||
msgid "Right ALC will start in 3s"
|
||||
msgstr ""
|
||||
|
||||
#: selfdrive/controls/lib/events.py:817
|
||||
msgid "STEERING REQUIRED: Lane Keeping OFF"
|
||||
msgstr ""
|
||||
|
||||
#: selfdrive/controls/lib/events.py:825
|
||||
msgid "STEERING REQUIRED: Blinkers ON"
|
||||
msgstr ""
|
||||
|
||||
#: selfdrive/controls/lib/events.py:833 selfdrive/controls/lib/events.py:838
|
||||
msgid "Lead Car Is Moving"
|
||||
msgstr ""
|
||||
|
||||
#: selfdrive/controls/lib/events.py:847
|
||||
msgid "WARNING"
|
||||
msgstr ""
|
||||
|
||||
#: selfdrive/controls/lib/events.py:848
|
||||
msgid "Grab wheel to start bypass"
|
||||
msgstr ""
|
||||
|
||||
#: selfdrive/controls/lib/events.py:855
|
||||
msgid "BYPASSING"
|
||||
msgstr ""
|
||||
|
||||
#: selfdrive/controls/lib/events.py:856
|
||||
msgid "HOLD WHEEL"
|
||||
msgstr ""
|
||||
|
||||
#: selfdrive/controls/lib/events.py:863
|
||||
msgid "Bypassed!"
|
||||
msgstr ""
|
||||
|
||||
#: selfdrive/controls/lib/events.py:864
|
||||
msgid "Release wheel when ready"
|
||||
msgstr ""
|
||||
BIN
selfdrive/assets/locales/ja-JP/LC_MESSAGES/events.mo
Normal file
545
selfdrive/assets/locales/ja-JP/LC_MESSAGES/events.po
Normal file
@@ -0,0 +1,545 @@
|
||||
# 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.
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2020-10-15 13:37+1000\n"
|
||||
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
||||
"Last-Translator: nikkurie <@nikkurie>\n"
|
||||
"Language-Team: LANGUAGE <LL@li.org>\n"
|
||||
"Language: ja-JP\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:153
|
||||
msgid "openpilot Unavailable"
|
||||
msgstr "オープンパイロットは利用できません"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:160 selfdrive/controls/lib/events.py:167
|
||||
msgid "TAKE CONTROL IMMEDIATELY"
|
||||
msgstr "すぐにハンドルを持って"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:187 selfdrive/controls/lib/events.py:328
|
||||
#: selfdrive/controls/lib/events.py:354 selfdrive/controls/lib/events.py:418
|
||||
#: selfdrive/controls/lib/events.py:470 selfdrive/controls/lib/events.py:522
|
||||
#: selfdrive/controls/lib/events.py:532
|
||||
msgid "TAKE CONTROL"
|
||||
msgstr "ハンドルを持って"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:188
|
||||
#, fuzzy, python-format
|
||||
msgid "Steer Unavailable Below %(speed)d %(unit)s"
|
||||
msgstr "横の制御が無効になり速度が以下になります"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:196
|
||||
#, fuzzy, python-format
|
||||
msgid "Calibration in Progress: %d%%"
|
||||
msgstr "キャリブレーション中:"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:197
|
||||
#, python-format
|
||||
msgid "Drive Above %(speed)d %(unit)s"
|
||||
msgstr "%(speed)d %(unit)s 制限速度以上の運転をしてください"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:204
|
||||
msgid "Poor GPS reception"
|
||||
msgstr "GPS受信不良"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:205
|
||||
msgid "If sky is visible, contact support"
|
||||
msgstr "地下・トンネルでない場合は、カスタマーサービスに連絡ください"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:205
|
||||
msgid "Check GPS antenna placement"
|
||||
msgstr "GPSアンテナの位置を確認してください。"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:210
|
||||
msgid "Cruise Mode Disabled"
|
||||
msgstr "クルーズモードをオフ"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:212
|
||||
msgid "Main Switch Off"
|
||||
msgstr "メインスイッチをオフ"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:222
|
||||
msgid "DEBUG ALERT"
|
||||
msgstr "テストメッセージを削除"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:230
|
||||
msgid "Be ready to take over at any time"
|
||||
msgstr "いつでも引き継げるよう準備しておいてください。"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:231 selfdrive/controls/lib/events.py:239
|
||||
#: selfdrive/controls/lib/events.py:247 selfdrive/controls/lib/events.py:255
|
||||
msgid "Always keep hands on wheel and eyes on road"
|
||||
msgstr "常にハンドルに触れ、道路から目を離さない"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:238
|
||||
msgid "WARNING: This branch is not tested"
|
||||
msgstr "警告: このブランチはテストされていません"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:246
|
||||
msgid "Dashcam mode"
|
||||
msgstr "ダッシュカムモード"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:254
|
||||
msgid "Dashcam mode for unsupported car"
|
||||
msgstr "未対応車のためダッシュカムモードのみ"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:262
|
||||
msgid "Unsupported Giraffe Configuration"
|
||||
msgstr "サポートされていないGiraffeの設定"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:263
|
||||
msgid "Visit comma.ai/tg"
|
||||
msgstr "comma.ai/tg を参照"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:270
|
||||
msgid "White Panda Is No Longer Supported"
|
||||
msgstr "ホワイトパンダはサポート終了しました"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:271
|
||||
msgid "Upgrade to comma two or black panda"
|
||||
msgstr "コンマ2やブラックパンダにアップグレード"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:274
|
||||
msgid "White panda is no longer supported"
|
||||
msgstr "ホワイトパンダはサポート終了しました"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:279
|
||||
msgid "Stock LKAS is turned on"
|
||||
msgstr "純正LKASがオン"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:280
|
||||
msgid "Turn off stock LKAS to engage"
|
||||
msgstr "純正LKASをオフにしてエンゲージ"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:288
|
||||
msgid "Community Feature Detected"
|
||||
msgstr "コミュニティ開発の機能を検出"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:289
|
||||
msgid "Enable Community Features in Developer Settings"
|
||||
msgstr "開発者設定でコミュニティ機能を有効にする"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:296
|
||||
msgid "Dashcam Mode"
|
||||
msgstr "ダッシュカムモード"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:297
|
||||
msgid "Car Unrecognized"
|
||||
msgstr "認識できない車"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:304 selfdrive/controls/lib/events.py:312
|
||||
#: selfdrive/controls/lib/events.py:320
|
||||
msgid "BRAKE!"
|
||||
msgstr "ブレーキ!"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:305
|
||||
msgid "Stock AEB: Risk of Collision"
|
||||
msgstr "衝突の危険"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:313
|
||||
msgid "Stock FCW: Risk of Collision"
|
||||
msgstr "衝突の危険"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:321
|
||||
msgid "Risk of Collision"
|
||||
msgstr "衝突の危険"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:329
|
||||
msgid "Lane Departure Detected"
|
||||
msgstr "車線逸脱を検知"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:338
|
||||
msgid "openpilot will not brake while gas pressed"
|
||||
msgstr "アクセル中、オープンパイロットはブレーキをかけません"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:346
|
||||
msgid "Vehicle Parameter Identification Failed"
|
||||
msgstr "車両パラメータの識別に失敗しました。"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:355 selfdrive/controls/lib/events.py:523
|
||||
#: selfdrive/controls/lib/events.py:526
|
||||
msgid "Steering Temporarily Unavailable"
|
||||
msgstr "ステアリングは一時的に利用不可"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:362
|
||||
msgid "KEEP EYES ON ROAD: Driver Distracted"
|
||||
msgstr "道路から目を離さないで:注意散漫です"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:370
|
||||
msgid "KEEP EYES ON ROAD"
|
||||
msgstr "道路から目を離さないで"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:371
|
||||
msgid "Driver Appears Distracted"
|
||||
msgstr "ドライバーは注意散漫に見えます"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:378 selfdrive/controls/lib/events.py:402
|
||||
msgid "DISENGAGE IMMEDIATELY"
|
||||
msgstr "すぐに解除してください"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:379
|
||||
msgid "Driver Was Distracted"
|
||||
msgstr "ドライバーは注意力散漫"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:386
|
||||
msgid "TOUCH STEERING WHEEL: No Face Detected"
|
||||
msgstr "ハンドルに触れて:顔が検出できない"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:394
|
||||
msgid "TOUCH STEERING WHEEL"
|
||||
msgstr "ハンドルに触れて"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:395
|
||||
msgid "Driver Is Unresponsive"
|
||||
msgstr "ドライバーが無反応"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:403
|
||||
msgid "Driver Was Unresponsive"
|
||||
msgstr "ドライバーが無反応でした"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:410
|
||||
msgid "CHECK DRIVER FACE VISIBILITY"
|
||||
msgstr "ドライバーの顔の視認性を確認"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:411
|
||||
msgid "Driver Monitor Model Output Uncertain"
|
||||
msgstr "ドライバー監視モデルが不完全"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:419
|
||||
msgid "Resume Driving Manually"
|
||||
msgstr "手動で運転を再開"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:426
|
||||
msgid "STOPPED"
|
||||
msgstr "停止"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:427
|
||||
msgid "Press Resume to Move"
|
||||
msgstr "Resumeを押して移動します。"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:438
|
||||
msgid "Steer Left to Start Lane Change"
|
||||
msgstr "左ハンドルで車線変更を開始"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:439 selfdrive/controls/lib/events.py:447
|
||||
#: selfdrive/controls/lib/events.py:455 selfdrive/controls/lib/events.py:463
|
||||
#: selfdrive/controls/lib/events.py:802 selfdrive/controls/lib/events.py:810
|
||||
msgid "Monitor Other Vehicles"
|
||||
msgstr "他の車両を監視"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:446
|
||||
msgid "Steer Right to Start Lane Change"
|
||||
msgstr "右ハンドルで車線変更を開始"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:454
|
||||
msgid "Car Detected in Blindspot"
|
||||
msgstr "ブラインドスポットで車両を発見"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:462
|
||||
msgid "Changing Lane"
|
||||
msgstr "レーンチェンジ中"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:471
|
||||
msgid "Turn Exceeds Steering Limit"
|
||||
msgstr "ステアリングリミットを超えています"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:496
|
||||
msgid "Brake Hold Active"
|
||||
msgstr "サイドブレーキが作動"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:501
|
||||
msgid "Park Brake Engaged"
|
||||
msgstr "サイドブレーキ作動中"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:506
|
||||
msgid "Pedal Pressed During Attempt"
|
||||
msgstr "ペダル/ブレーキを検出"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:517
|
||||
msgid "Enable Adaptive Cruise"
|
||||
msgstr "ACCを有効化"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:533
|
||||
msgid "Attempting Refocus: Camera Focus Invalid"
|
||||
msgstr "再フォーカス中です"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:539
|
||||
msgid "Out of Storage Space"
|
||||
msgstr "空き容量不足"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:544
|
||||
msgid "Speed Too Low"
|
||||
msgstr "速度が遅すぎます"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:549 selfdrive/controls/lib/events.py:553
|
||||
msgid "NEOS Update Required"
|
||||
msgstr "NEOSの更新が必要"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:550
|
||||
msgid "Please Wait for Update"
|
||||
msgstr "更新をお待ちください"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:558 selfdrive/controls/lib/events.py:562
|
||||
msgid "No Data from Device Sensors"
|
||||
msgstr "デバイスセンサからのデータがありません"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:559 selfdrive/controls/lib/events.py:572
|
||||
#: selfdrive/controls/lib/events.py:669
|
||||
msgid "Reboot your Device"
|
||||
msgstr "デバイスを再起動"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:571 selfdrive/controls/lib/events.py:575
|
||||
msgid "Speaker not found"
|
||||
msgstr "スピーカーが見つかりません"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:579
|
||||
msgid "Distraction Level Too High"
|
||||
msgstr "注意力散漫すぎます"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:583
|
||||
msgid "System Overheated"
|
||||
msgstr "オーバーヒート"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:584
|
||||
msgid "System overheated"
|
||||
msgstr "オーバーヒート"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:588 selfdrive/controls/lib/events.py:589
|
||||
msgid "Gear not D"
|
||||
msgstr "Dではない"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:594
|
||||
#, fuzzy
|
||||
msgid "Calibration Invalid"
|
||||
msgstr "キャリブレーション"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:595
|
||||
#, fuzzy
|
||||
msgid "Reposition Device and Recalibrate"
|
||||
msgstr "キャリブレーションが無効です。再実行してください。"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:598 selfdrive/controls/lib/events.py:599
|
||||
msgid "Calibration Invalid: Reposition Device & Recalibrate"
|
||||
msgstr "キャリブレーションが無効です。再実行してください。"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:603 selfdrive/controls/lib/events.py:605
|
||||
msgid "Calibration in Progress"
|
||||
msgstr "キャリブレーション"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:609
|
||||
msgid "Door Open"
|
||||
msgstr "ドアが開いています"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:610
|
||||
msgid "Door open"
|
||||
msgstr "ドアが開いています"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:614
|
||||
msgid "Seatbelt Unlatched"
|
||||
msgstr "シートベルト未着用"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:615
|
||||
msgid "Seatbelt unlatched"
|
||||
msgstr "シートベルト未着用"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:619 selfdrive/controls/lib/events.py:620
|
||||
msgid "ESP Off"
|
||||
msgstr "ESPオフ"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:624 selfdrive/controls/lib/events.py:625
|
||||
msgid "Low Battery"
|
||||
msgstr "低バッテリー"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:629 selfdrive/controls/lib/events.py:630
|
||||
msgid "Communication Issue between Processes"
|
||||
msgstr "プロセス間の通信の問題"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:635 selfdrive/controls/lib/events.py:636
|
||||
msgid "Radar Communication Issue"
|
||||
msgstr "レーダー通信問題"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:641 selfdrive/controls/lib/events.py:642
|
||||
#: selfdrive/controls/lib/events.py:646 selfdrive/controls/lib/events.py:647
|
||||
msgid "Radar Error: Restart the Car"
|
||||
msgstr "レーダーエラー:車を再起動"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:651 selfdrive/controls/lib/events.py:652
|
||||
msgid "Driving model lagging"
|
||||
msgstr "制御モデルに遅延がある"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:656 selfdrive/controls/lib/events.py:657
|
||||
msgid "Vision Model Output Uncertain"
|
||||
msgstr "映像が不明瞭です"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:661 selfdrive/controls/lib/events.py:662
|
||||
msgid "Device Fell Off Mount"
|
||||
msgstr ""
|
||||
|
||||
#: selfdrive/controls/lib/events.py:666 selfdrive/controls/lib/events.py:672
|
||||
msgid "Low Memory: Reboot Your Device"
|
||||
msgstr "ローメモリ:デバイスを再起動"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:668
|
||||
msgid "RAM Critically Low"
|
||||
msgstr "RAMが致命的に低い"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:677 selfdrive/controls/lib/events.py:678
|
||||
msgid "Controls Failed"
|
||||
msgstr "制御失敗"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:682
|
||||
msgid "Controls Mismatch"
|
||||
msgstr "制御不一致"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:686 selfdrive/controls/lib/events.py:688
|
||||
#: selfdrive/controls/lib/events.py:692
|
||||
msgid "CAN Error: Check Connections"
|
||||
msgstr "CANエラー:接続を確認"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:696 selfdrive/controls/lib/events.py:702
|
||||
msgid "LKAS Fault: Restart the Car"
|
||||
msgstr "LKASの故障:車を再起動"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:698
|
||||
msgid "LKAS Fault: Restart the car to engage"
|
||||
msgstr "LKASの故障:車を再起動後発進"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:706 selfdrive/controls/lib/events.py:712
|
||||
#: selfdrive/controls/lib/events.py:795
|
||||
msgid "Cruise Fault: Restart the Car"
|
||||
msgstr "クルーズ失敗:車を再起動"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:708 selfdrive/controls/lib/events.py:791
|
||||
msgid "Cruise Fault: Restart the car to engage"
|
||||
msgstr "クルーズ失敗:車を再起動後発進"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:716
|
||||
msgid "Gas Fault: Restart the Car"
|
||||
msgstr "アクセル故障:車を再起動"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:717
|
||||
msgid "Gas Error: Restart the Car"
|
||||
msgstr "アクセルエラー:車を再起動"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:722
|
||||
#, fuzzy
|
||||
msgid ""
|
||||
"Reverse\n"
|
||||
"Gear"
|
||||
msgstr "Rに切り替え"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:726
|
||||
msgid "Reverse Gear"
|
||||
msgstr "Rに切り替え"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:731
|
||||
msgid "Cruise Is Off"
|
||||
msgstr "クルーズコントロールオフ"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:735 selfdrive/controls/lib/events.py:736
|
||||
msgid "Planner Solution Error"
|
||||
msgstr "Planner Solution エラー"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:740 selfdrive/controls/lib/events.py:742
|
||||
#: selfdrive/controls/lib/events.py:746
|
||||
msgid "Harness Malfunction"
|
||||
msgstr "ハーネスが故障"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:743
|
||||
msgid "Please Check Hardware"
|
||||
msgstr "ハードウェアを確認して"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:751 selfdrive/controls/lib/events.py:760
|
||||
msgid "openpilot Canceled"
|
||||
msgstr "オープンパイロットはキャンセルされました"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:752
|
||||
msgid "No close lead car"
|
||||
msgstr "リードカー不在"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:755
|
||||
msgid "No Close Lead Car"
|
||||
msgstr "リードカー不在"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:761
|
||||
msgid "Speed too low"
|
||||
msgstr "速度が遅すぎる"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:768 selfdrive/controls/lib/events.py:773
|
||||
msgid "Speed Too High"
|
||||
msgstr "速度が速すぎる"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:769
|
||||
msgid "Slow down to resume operation"
|
||||
msgstr "速度を下げてオープンパイロットを再開"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:774
|
||||
msgid "Slow down to engage"
|
||||
msgstr "速度を落として発進"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:781
|
||||
msgid "Please connect to Internet"
|
||||
msgstr "インターネット接続を確認"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:782
|
||||
msgid "An Update Check Is Required to Engage"
|
||||
msgstr "発進するには更新が必要です"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:785
|
||||
msgid "Please Connect to Internet"
|
||||
msgstr "インターネット接続を確認"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:801
|
||||
msgid "Left ALC will start in 3s"
|
||||
msgstr "左車線に移動します"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:809
|
||||
msgid "Right ALC will start in 3s"
|
||||
msgstr "右車線に移動します"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:817
|
||||
msgid "STEERING REQUIRED: Lane Keeping OFF"
|
||||
msgstr "操作が必要:レーンキープオフ"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:825
|
||||
msgid "STEERING REQUIRED: Blinkers ON"
|
||||
msgstr "操作が必要:ウインカーオン"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:833 selfdrive/controls/lib/events.py:838
|
||||
msgid "Lead Car Is Moving"
|
||||
msgstr "リードカーが移動しました"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:847
|
||||
msgid "WARNING"
|
||||
msgstr ""
|
||||
|
||||
#: selfdrive/controls/lib/events.py:848
|
||||
msgid "Grab wheel to start bypass"
|
||||
msgstr ""
|
||||
|
||||
#: selfdrive/controls/lib/events.py:855
|
||||
msgid "BYPASSING"
|
||||
msgstr ""
|
||||
|
||||
#: selfdrive/controls/lib/events.py:856
|
||||
msgid "HOLD WHEEL"
|
||||
msgstr ""
|
||||
|
||||
#: selfdrive/controls/lib/events.py:863
|
||||
msgid "Bypassed!"
|
||||
msgstr ""
|
||||
|
||||
#: selfdrive/controls/lib/events.py:864
|
||||
msgid "Release wheel when ready"
|
||||
msgstr ""
|
||||
|
||||
#~ msgid "Drive Above"
|
||||
#~ msgstr "制限速度以上の運転をしてください"
|
||||
BIN
selfdrive/assets/locales/ko-KR/LC_MESSAGES/events.mo
Normal file
543
selfdrive/assets/locales/ko-KR/LC_MESSAGES/events.po
Normal file
@@ -0,0 +1,543 @@
|
||||
# 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-10-15 13:37+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:153
|
||||
msgid "openpilot Unavailable"
|
||||
msgstr "오픈파일럿 사용불가"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:160 selfdrive/controls/lib/events.py:167
|
||||
msgid "TAKE CONTROL IMMEDIATELY"
|
||||
msgstr "핸들을 잡아주세요"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:187 selfdrive/controls/lib/events.py:328
|
||||
#: selfdrive/controls/lib/events.py:354 selfdrive/controls/lib/events.py:418
|
||||
#: selfdrive/controls/lib/events.py:470 selfdrive/controls/lib/events.py:522
|
||||
#: selfdrive/controls/lib/events.py:532
|
||||
msgid "TAKE CONTROL"
|
||||
msgstr "핸들을 잡아주세요"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:188
|
||||
#, fuzzy, python-format
|
||||
msgid "Steer Unavailable Below %(speed)d %(unit)s"
|
||||
msgstr "%d %s 이하에서는 조향제어가 불가합니다"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:196
|
||||
#, fuzzy, python-format
|
||||
msgid "Calibration in Progress: %d%%"
|
||||
msgstr "캘리브레이션 진행중: %d%%"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:197
|
||||
#, fuzzy, python-format
|
||||
msgid "Drive Above %(speed)d %(unit)s"
|
||||
msgstr "%(speed)d %(unit)s 이상의 속도로 주행하세요"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:204
|
||||
msgid "Poor GPS reception"
|
||||
msgstr "GPS 신호 약함"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:205
|
||||
msgid "If sky is visible, contact support"
|
||||
msgstr "환경에 문제가 없을경우 서비스팀에 연락하세요"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:205
|
||||
msgid "Check GPS antenna placement"
|
||||
msgstr "GPS안테나 위치를 점검하세요"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:210
|
||||
msgid "Cruise Mode Disabled"
|
||||
msgstr "크루즈 모드 꺼짐"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:212
|
||||
msgid "Main Switch Off"
|
||||
msgstr ""
|
||||
|
||||
#: selfdrive/controls/lib/events.py:222
|
||||
msgid "DEBUG ALERT"
|
||||
msgstr ""
|
||||
|
||||
#: selfdrive/controls/lib/events.py:230
|
||||
msgid "Be ready to take over at any time"
|
||||
msgstr "오픈파일럿 사용준비가 되었습니다"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:231 selfdrive/controls/lib/events.py:239
|
||||
#: selfdrive/controls/lib/events.py:247 selfdrive/controls/lib/events.py:255
|
||||
msgid "Always keep hands on wheel and eyes on road"
|
||||
msgstr "안전운전을 위해 항상 핸들을 잡고 도로교통 상황을 주시하세요"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:238
|
||||
msgid "WARNING: This branch is not tested"
|
||||
msgstr "경고: 이 Branch는 테스트되지 않았습니다"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:246
|
||||
msgid "Dashcam mode"
|
||||
msgstr "대시캠 모드"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:254
|
||||
msgid "Dashcam mode for unsupported car"
|
||||
msgstr "안전운전을 위해 항상 핸들을 잡고 도로교통 상황을 주시하세요"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:262
|
||||
msgid "Unsupported Giraffe Configuration"
|
||||
msgstr "지원되지 않는 지라프 설정"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:263
|
||||
msgid "Visit comma.ai/tg"
|
||||
msgstr "comma.ai/tg 방문하세요"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:270
|
||||
msgid "White Panda Is No Longer Supported"
|
||||
msgstr "화이트판다는 더 이상 지원되지 않습니다"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:271
|
||||
msgid "Upgrade to comma two or black panda"
|
||||
msgstr "콤마2나 블랙판다로 업그레이드 하세요"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:274
|
||||
msgid "White panda is no longer supported"
|
||||
msgstr "화이트판다는 더 이상 지원되지 않습니다"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:279
|
||||
msgid "Stock LKAS is turned on"
|
||||
msgstr "차량의 LKAS 기능이 켜져 있습니다"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:280
|
||||
msgid "Turn off stock LKAS to engage"
|
||||
msgstr "오픈파일럿 사용을 위해 LKAS를 끄세요"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:288
|
||||
msgid "Community Feature Detected"
|
||||
msgstr "커뮤니티 기능 감지됨"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:289
|
||||
msgid "Enable Community Features in Developer Settings"
|
||||
msgstr "개발자 설정에서 커뮤니티 기능을 활성화하세요"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:296
|
||||
msgid "Dashcam Mode"
|
||||
msgstr "대시캠 모드"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:297
|
||||
msgid "Car Unrecognized"
|
||||
msgstr "미인식 차량"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:304 selfdrive/controls/lib/events.py:312
|
||||
#: selfdrive/controls/lib/events.py:320
|
||||
msgid "BRAKE!"
|
||||
msgstr "브레이크!"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:305
|
||||
msgid "Stock AEB: Risk of Collision"
|
||||
msgstr "순정 AEB: 충돌 위험"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:313
|
||||
msgid "Stock FCW: Risk of Collision"
|
||||
msgstr "순정 FCW: 충돌 위험"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:321
|
||||
msgid "Risk of Collision"
|
||||
msgstr "충돌 위험"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:329
|
||||
msgid "Lane Departure Detected"
|
||||
msgstr "차선이탈이 감지되었습니다"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:338
|
||||
msgid "openpilot will not brake while gas pressed"
|
||||
msgstr "가속중에는 오픈파일럿 브레이크 작동불가"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:346
|
||||
msgid "Vehicle Parameter Identification Failed"
|
||||
msgstr "차량 매개 변수 식별 실패"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:355 selfdrive/controls/lib/events.py:523
|
||||
#: selfdrive/controls/lib/events.py:526
|
||||
msgid "Steering Temporarily Unavailable"
|
||||
msgstr "조향제어가 일시적으로 비활성화 되었습니다"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:362
|
||||
msgid "KEEP EYES ON ROAD: Driver Distracted"
|
||||
msgstr "도로상황에 주의를 기울이세요"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:370
|
||||
msgid "KEEP EYES ON ROAD"
|
||||
msgstr "도로상황에 주의하세요"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:371
|
||||
msgid "Driver Appears Distracted"
|
||||
msgstr "전방주시 필요"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:378 selfdrive/controls/lib/events.py:402
|
||||
msgid "DISENGAGE IMMEDIATELY"
|
||||
msgstr "경고: 조향제어가 즉시 해제됩니다"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:379
|
||||
msgid "Driver Was Distracted"
|
||||
msgstr "운전자 전방주시 불안"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:386
|
||||
msgid "TOUCH STEERING WHEEL: No Face Detected"
|
||||
msgstr "핸들을 터치하세요: 모니터링 없음"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:394
|
||||
msgid "TOUCH STEERING WHEEL"
|
||||
msgstr "핸들을 터치하세요"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:395
|
||||
msgid "Driver Is Unresponsive"
|
||||
msgstr "운전자 모니터링 없음"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:403
|
||||
msgid "Driver Was Unresponsive"
|
||||
msgstr "운전자 모니터링 없음"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:410
|
||||
msgid "CHECK DRIVER FACE VISIBILITY"
|
||||
msgstr "운전자 얼굴 확인 중"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:411
|
||||
msgid "Driver Monitor Model Output Uncertain"
|
||||
msgstr "운전자 얼굴 인식이 어렵습니다"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:419
|
||||
msgid "Resume Driving Manually"
|
||||
msgstr "수동으로 재출발 하세요"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:426
|
||||
msgid "STOPPED"
|
||||
msgstr "잠시멈춤"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:427
|
||||
msgid "Press Resume to Move"
|
||||
msgstr "재출발을 위해 RES버튼을 누르세요"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:438
|
||||
msgid "Steer Left to Start Lane Change"
|
||||
msgstr "차선 변경을 위해 핸들을 좌측으로 살짝 돌리세요"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:439 selfdrive/controls/lib/events.py:447
|
||||
#: selfdrive/controls/lib/events.py:455 selfdrive/controls/lib/events.py:463
|
||||
#: selfdrive/controls/lib/events.py:802 selfdrive/controls/lib/events.py:810
|
||||
msgid "Monitor Other Vehicles"
|
||||
msgstr "다른 차량에 주의하세요"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:446
|
||||
msgid "Steer Right to Start Lane Change"
|
||||
msgstr "차선 변경을 위해 핸들을 우측으로 살짝 돌리세요"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:454
|
||||
msgid "Car Detected in Blindspot"
|
||||
msgstr "측면 차량 접근 중"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:462
|
||||
msgid "Changing Lane"
|
||||
msgstr "차선 변경 중"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:471
|
||||
msgid "Turn Exceeds Steering Limit"
|
||||
msgstr ""
|
||||
|
||||
#: selfdrive/controls/lib/events.py:496
|
||||
msgid "Brake Hold Active"
|
||||
msgstr "브레이크 홀드 중"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:501
|
||||
msgid "Park Brake Engaged"
|
||||
msgstr "파킹브레이크 체결 됨"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:506
|
||||
msgid "Pedal Pressed During Attempt"
|
||||
msgstr "시작 중 페달 밟음"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:517
|
||||
msgid "Enable Adaptive Cruise"
|
||||
msgstr "어댑티브 크루즈를 활성화하세요"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:533
|
||||
msgid "Attempting Refocus: Camera Focus Invalid"
|
||||
msgstr "카메라 포커스 조정중: 카메라 포커스 부정확"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:539
|
||||
msgid "Out of Storage Space"
|
||||
msgstr "저장공간 부족"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:544
|
||||
msgid "Speed Too Low"
|
||||
msgstr "차량의 속도 낮음"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:549 selfdrive/controls/lib/events.py:553
|
||||
msgid "NEOS Update Required"
|
||||
msgstr "NEOS 업데이트 필요"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:550
|
||||
msgid "Please Wait for Update"
|
||||
msgstr "업데이트를 위해 기다리세요"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:558 selfdrive/controls/lib/events.py:562
|
||||
msgid "No Data from Device Sensors"
|
||||
msgstr "EON센서로부터 데이터를 받지 못했습니다"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:559 selfdrive/controls/lib/events.py:572
|
||||
#: selfdrive/controls/lib/events.py:669
|
||||
msgid "Reboot your Device"
|
||||
msgstr "장치를 재시작 하세요"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:571 selfdrive/controls/lib/events.py:575
|
||||
msgid "Speaker not found"
|
||||
msgstr "스피커를 찾을 수 없습니다"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:579
|
||||
msgid "Distraction Level Too High"
|
||||
msgstr "운전자 전방주시 매우 불안"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:583
|
||||
msgid "System Overheated"
|
||||
msgstr "시스템이 과열되었습니다"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:584
|
||||
msgid "System overheated"
|
||||
msgstr "시스템이 과열되었습니다"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:588 selfdrive/controls/lib/events.py:589
|
||||
msgid "Gear not D"
|
||||
msgstr "기어가 드라이브모드가 아닙니다"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:594
|
||||
#, fuzzy
|
||||
msgid "Calibration Invalid"
|
||||
msgstr "캘리브레이션 진행 중"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:595
|
||||
#, fuzzy
|
||||
msgid "Reposition Device and Recalibrate"
|
||||
msgstr "캘리브레이션 유효하지 않음: 장치 위치 조정 및 재 캘리브레이션"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:598 selfdrive/controls/lib/events.py:599
|
||||
msgid "Calibration Invalid: Reposition Device & Recalibrate"
|
||||
msgstr "캘리브레이션 유효하지 않음: 장치 위치 조정 및 재 캘리브레이션"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:603 selfdrive/controls/lib/events.py:605
|
||||
msgid "Calibration in Progress"
|
||||
msgstr "캘리브레이션 진행 중"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:609
|
||||
msgid "Door Open"
|
||||
msgstr "도어가 열려있습니다"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:610
|
||||
msgid "Door open"
|
||||
msgstr "도어가 열려있습니다"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:614
|
||||
msgid "Seatbelt Unlatched"
|
||||
msgstr "안전벨트를 체결하세요"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:615
|
||||
msgid "Seatbelt unlatched"
|
||||
msgstr "안전벨트를 체결하세요"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:619 selfdrive/controls/lib/events.py:620
|
||||
msgid "ESP Off"
|
||||
msgstr "ESP 꺼짐"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:624 selfdrive/controls/lib/events.py:625
|
||||
msgid "Low Battery"
|
||||
msgstr "배터리 부족"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:629 selfdrive/controls/lib/events.py:630
|
||||
msgid "Communication Issue between Processes"
|
||||
msgstr "프로세스 간 통신 오류가 있습니다"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:635 selfdrive/controls/lib/events.py:636
|
||||
msgid "Radar Communication Issue"
|
||||
msgstr "레이더 오류: 차량을 재시작하세요"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:641 selfdrive/controls/lib/events.py:642
|
||||
#: selfdrive/controls/lib/events.py:646 selfdrive/controls/lib/events.py:647
|
||||
msgid "Radar Error: Restart the Car"
|
||||
msgstr "레이더 오류: 차량을 재시작하세요"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:651 selfdrive/controls/lib/events.py:652
|
||||
msgid "Driving model lagging"
|
||||
msgstr "주행 모델 지연"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:656 selfdrive/controls/lib/events.py:657
|
||||
msgid "Vision Model Output Uncertain"
|
||||
msgstr "전방 영상 인식 불안"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:661 selfdrive/controls/lib/events.py:662
|
||||
msgid "Device Fell Off Mount"
|
||||
msgstr ""
|
||||
|
||||
#: selfdrive/controls/lib/events.py:666 selfdrive/controls/lib/events.py:672
|
||||
msgid "Low Memory: Reboot Your Device"
|
||||
msgstr "메모리 부족: 장치를 재시작하세요"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:668
|
||||
msgid "RAM Critically Low"
|
||||
msgstr "메모리 부족 심각"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:677 selfdrive/controls/lib/events.py:678
|
||||
msgid "Controls Failed"
|
||||
msgstr "차량제어 불가"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:682
|
||||
msgid "Controls Mismatch"
|
||||
msgstr ""
|
||||
|
||||
#: selfdrive/controls/lib/events.py:686 selfdrive/controls/lib/events.py:688
|
||||
#: selfdrive/controls/lib/events.py:692
|
||||
msgid "CAN Error: Check Connections"
|
||||
msgstr "CAN 오류: CAN 신호를 확인하세요"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:696 selfdrive/controls/lib/events.py:702
|
||||
msgid "LKAS Fault: Restart the Car"
|
||||
msgstr "LKAS 오류: 차량을 재시작하세요"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:698
|
||||
msgid "LKAS Fault: Restart the car to engage"
|
||||
msgstr "LKAS 오류: 시작을 위해 차량을 재시작하세요"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:706 selfdrive/controls/lib/events.py:712
|
||||
#: selfdrive/controls/lib/events.py:795
|
||||
msgid "Cruise Fault: Restart the Car"
|
||||
msgstr "크루즈 오류: 차량을 재시작하세요"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:708 selfdrive/controls/lib/events.py:791
|
||||
msgid "Cruise Fault: Restart the car to engage"
|
||||
msgstr "크루즈 오류: 시작을 위해 차량을 재시작하세요"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:716
|
||||
msgid "Gas Fault: Restart the Car"
|
||||
msgstr "가속페달 오류: 차량을 재시작하세요"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:717
|
||||
msgid "Gas Error: Restart the Car"
|
||||
msgstr "가속페달 오류: 차량을 재시작하세요"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:722
|
||||
#, fuzzy
|
||||
msgid ""
|
||||
"Reverse\n"
|
||||
"Gear"
|
||||
msgstr "후진 기어"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:726
|
||||
msgid "Reverse Gear"
|
||||
msgstr "후진 기어"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:731
|
||||
msgid "Cruise Is Off"
|
||||
msgstr "크루즈 꺼짐"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:735 selfdrive/controls/lib/events.py:736
|
||||
msgid "Planner Solution Error"
|
||||
msgstr ""
|
||||
|
||||
#: selfdrive/controls/lib/events.py:740 selfdrive/controls/lib/events.py:742
|
||||
#: selfdrive/controls/lib/events.py:746
|
||||
msgid "Harness Malfunction"
|
||||
msgstr "하네스 오작동"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:743
|
||||
msgid "Please Check Hardware"
|
||||
msgstr "장치를 점검하세요"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:751 selfdrive/controls/lib/events.py:760
|
||||
msgid "openpilot Canceled"
|
||||
msgstr "오픈파일럿 시작불가"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:752
|
||||
msgid "No close lead car"
|
||||
msgstr "선행차량이 없습니다"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:755
|
||||
msgid "No Close Lead Car"
|
||||
msgstr "선행차량이 없습니다"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:761
|
||||
msgid "Speed too low"
|
||||
msgstr "선행차량이 없습니다"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:768 selfdrive/controls/lib/events.py:773
|
||||
msgid "Speed Too High"
|
||||
msgstr "속도가 너무 높습니다"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:769
|
||||
msgid "Slow down to resume operation"
|
||||
msgstr "재 작동을 위해 차량의 속도를 낮추세요"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:774
|
||||
msgid "Slow down to engage"
|
||||
msgstr "시작을 위해 차량의 속도를 낮추세요"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:781
|
||||
msgid "Please connect to Internet"
|
||||
msgstr "인터넷에 연결하세요"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:782
|
||||
msgid "An Update Check Is Required to Engage"
|
||||
msgstr "시작을 위해 업데이트를 확인해야 합니다"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:785
|
||||
msgid "Please Connect to Internet"
|
||||
msgstr "인터넷에 연결하세요"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:801
|
||||
msgid "Left ALC will start in 3s"
|
||||
msgstr ""
|
||||
|
||||
#: selfdrive/controls/lib/events.py:809
|
||||
msgid "Right ALC will start in 3s"
|
||||
msgstr ""
|
||||
|
||||
#: selfdrive/controls/lib/events.py:817
|
||||
msgid "STEERING REQUIRED: Lane Keeping OFF"
|
||||
msgstr ""
|
||||
|
||||
#: selfdrive/controls/lib/events.py:825
|
||||
msgid "STEERING REQUIRED: Blinkers ON"
|
||||
msgstr ""
|
||||
|
||||
#: selfdrive/controls/lib/events.py:833 selfdrive/controls/lib/events.py:838
|
||||
msgid "Lead Car Is Moving"
|
||||
msgstr ""
|
||||
|
||||
#: selfdrive/controls/lib/events.py:847
|
||||
msgid "WARNING"
|
||||
msgstr ""
|
||||
|
||||
#: selfdrive/controls/lib/events.py:848
|
||||
msgid "Grab wheel to start bypass"
|
||||
msgstr ""
|
||||
|
||||
#: selfdrive/controls/lib/events.py:855
|
||||
msgid "BYPASSING"
|
||||
msgstr ""
|
||||
|
||||
#: selfdrive/controls/lib/events.py:856
|
||||
msgid "HOLD WHEEL"
|
||||
msgstr ""
|
||||
|
||||
#: selfdrive/controls/lib/events.py:863
|
||||
msgid "Bypassed!"
|
||||
msgstr ""
|
||||
|
||||
#: selfdrive/controls/lib/events.py:864
|
||||
msgid "Release wheel when ready"
|
||||
msgstr ""
|
||||
BIN
selfdrive/assets/locales/zh-CN/LC_MESSAGES/events.mo
Normal file
542
selfdrive/assets/locales/zh-CN/LC_MESSAGES/events.po
Normal file
@@ -0,0 +1,542 @@
|
||||
# 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.
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2020-10-15 13:37+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"
|
||||
"Language: zh-CN\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:153
|
||||
msgid "openpilot Unavailable"
|
||||
msgstr "无法使用 openpilot"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:160 selfdrive/controls/lib/events.py:167
|
||||
msgid "TAKE CONTROL IMMEDIATELY"
|
||||
msgstr "即刻接管控制"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:187 selfdrive/controls/lib/events.py:328
|
||||
#: selfdrive/controls/lib/events.py:354 selfdrive/controls/lib/events.py:418
|
||||
#: selfdrive/controls/lib/events.py:470 selfdrive/controls/lib/events.py:522
|
||||
#: selfdrive/controls/lib/events.py:532
|
||||
msgid "TAKE CONTROL"
|
||||
msgstr "接管控制"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:188
|
||||
#, fuzzy, python-format
|
||||
msgid "Steer Unavailable Below %(speed)d %(unit)s"
|
||||
msgstr "横向控制暂时失效,车速低于 %d %s"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:196
|
||||
#, fuzzy, python-format
|
||||
msgid "Calibration in Progress: %d%%"
|
||||
msgstr "正在校准中:%d%%"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:197
|
||||
#, fuzzy, python-format
|
||||
msgid "Drive Above %(speed)d %(unit)s"
|
||||
msgstr "车速请高于 %(speed)d %(unit)s"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:204
|
||||
msgid "Poor GPS reception"
|
||||
msgstr "GPS 讯号不良"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:205
|
||||
msgid "If sky is visible, contact support"
|
||||
msgstr "如果您不在地下室/隧道,请联系客服"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:205
|
||||
msgid "Check GPS antenna placement"
|
||||
msgstr "请检查 GPS 天线位置"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:210
|
||||
msgid "Cruise Mode Disabled"
|
||||
msgstr "巡航模式关闭"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:212
|
||||
msgid "Main Switch Off"
|
||||
msgstr "主开关已关闭"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:222
|
||||
msgid "DEBUG ALERT"
|
||||
msgstr "除错用警示讯息"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:230
|
||||
msgid "Be ready to take over at any time"
|
||||
msgstr "请准备好随时接管"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:231 selfdrive/controls/lib/events.py:239
|
||||
#: selfdrive/controls/lib/events.py:247 selfdrive/controls/lib/events.py:255
|
||||
msgid "Always keep hands on wheel and eyes on road"
|
||||
msgstr "将手放在方向盘上并持续监视路况"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:238
|
||||
msgid "WARNING: This branch is not tested"
|
||||
msgstr "注意:这个分支未经过测试"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:246
|
||||
msgid "Dashcam mode"
|
||||
msgstr "行车记录模式"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:254
|
||||
msgid "Dashcam mode for unsupported car"
|
||||
msgstr "行车记录模式 (尚未支援车种)"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:262
|
||||
msgid "Unsupported Giraffe Configuration"
|
||||
msgstr "未支援的 Giraffe 设置"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:263
|
||||
msgid "Visit comma.ai/tg"
|
||||
msgstr "请查阅 comma.ai/tg"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:270
|
||||
msgid "White Panda Is No Longer Supported"
|
||||
msgstr "不再支持 White Panda"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:271
|
||||
msgid "Upgrade to comma two or black panda"
|
||||
msgstr "请升级至 comma two 或是使用 black panda"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:274
|
||||
msgid "White panda is no longer supported"
|
||||
msgstr "不再支持 White panda"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:279
|
||||
msgid "Stock LKAS is turned on"
|
||||
msgstr "原厂 LKAS 已开启"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:280
|
||||
msgid "Turn off stock LKAS to engage"
|
||||
msgstr "需关闭原厂 LKAS 才能启用"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:288
|
||||
msgid "Community Feature Detected"
|
||||
msgstr "检测到社群开发功能"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:289
|
||||
msgid "Enable Community Features in Developer Settings"
|
||||
msgstr "请至开发人员设定裡启用社群开发功能"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:296
|
||||
msgid "Dashcam Mode"
|
||||
msgstr "行车记录模式"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:297
|
||||
msgid "Car Unrecognized"
|
||||
msgstr "无法辨识车款"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:304 selfdrive/controls/lib/events.py:312
|
||||
#: selfdrive/controls/lib/events.py:320
|
||||
msgid "BRAKE!"
|
||||
msgstr "刹车!"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:305
|
||||
msgid "Stock AEB: Risk of Collision"
|
||||
msgstr "有碰撞的风险"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:313
|
||||
msgid "Stock FCW: Risk of Collision"
|
||||
msgstr "有碰撞的风险"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:321
|
||||
msgid "Risk of Collision"
|
||||
msgstr "有碰撞的风险"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:329
|
||||
msgid "Lane Departure Detected"
|
||||
msgstr "偏离车道"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:338
|
||||
msgid "openpilot will not brake while gas pressed"
|
||||
msgstr "在您踩着油门的时候 openpilot 将不会刹车"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:346
|
||||
msgid "Vehicle Parameter Identification Failed"
|
||||
msgstr "车子参数识别失败"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:355 selfdrive/controls/lib/events.py:523
|
||||
#: selfdrive/controls/lib/events.py:526
|
||||
msgid "Steering Temporarily Unavailable"
|
||||
msgstr "横向控制暂时失效"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:362
|
||||
msgid "KEEP EYES ON ROAD: Driver Distracted"
|
||||
msgstr "注意路况:驾驶分心"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:370
|
||||
msgid "KEEP EYES ON ROAD"
|
||||
msgstr "注意路况"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:371
|
||||
msgid "Driver Appears Distracted"
|
||||
msgstr "驾驶分心"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:378 selfdrive/controls/lib/events.py:402
|
||||
msgid "DISENGAGE IMMEDIATELY"
|
||||
msgstr "立即解除"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:379
|
||||
msgid "Driver Was Distracted"
|
||||
msgstr "驾驶分心"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:386
|
||||
msgid "TOUCH STEERING WHEEL: No Face Detected"
|
||||
msgstr "请触碰方向盘:未侦测到驾驶面容"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:394
|
||||
msgid "TOUCH STEERING WHEEL"
|
||||
msgstr "请触碰方向盘"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:395
|
||||
msgid "Driver Is Unresponsive"
|
||||
msgstr "驾驶没有反应"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:403
|
||||
msgid "Driver Was Unresponsive"
|
||||
msgstr "驾驶没有反应"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:410
|
||||
msgid "CHECK DRIVER FACE VISIBILITY"
|
||||
msgstr "请检查驾驶面部的可见度"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:411
|
||||
msgid "Driver Monitor Model Output Uncertain"
|
||||
msgstr "驾驶监控模型判断不明确"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:419
|
||||
msgid "Resume Driving Manually"
|
||||
msgstr "请自行恢復驾驶"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:426
|
||||
msgid "STOPPED"
|
||||
msgstr "已停止"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:427
|
||||
msgid "Press Resume to Move"
|
||||
msgstr "请按 RES 继续"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:438
|
||||
msgid "Steer Left to Start Lane Change"
|
||||
msgstr "请往左打方向盘切换至左车道"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:439 selfdrive/controls/lib/events.py:447
|
||||
#: selfdrive/controls/lib/events.py:455 selfdrive/controls/lib/events.py:463
|
||||
#: selfdrive/controls/lib/events.py:802 selfdrive/controls/lib/events.py:810
|
||||
msgid "Monitor Other Vehicles"
|
||||
msgstr "请注意其它车辆"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:446
|
||||
msgid "Steer Right to Start Lane Change"
|
||||
msgstr "请往右打方向盘切换至右车道"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:454
|
||||
msgid "Car Detected in Blindspot"
|
||||
msgstr "盲点侦测到车辆"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:462
|
||||
msgid "Changing Lane"
|
||||
msgstr "切换车道中"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:471
|
||||
msgid "Turn Exceeds Steering Limit"
|
||||
msgstr "弯道超过横向操控限制"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:496
|
||||
msgid "Brake Hold Active"
|
||||
msgstr "驻车煞车已启用"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:501
|
||||
msgid "Park Brake Engaged"
|
||||
msgstr "电子驻车已启动"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:506
|
||||
msgid "Pedal Pressed During Attempt"
|
||||
msgstr "启用时侦测到驾驶踩踏油门/刹车"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:517
|
||||
msgid "Enable Adaptive Cruise"
|
||||
msgstr "启用自适应巡航"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:533
|
||||
msgid "Attempting Refocus: Camera Focus Invalid"
|
||||
msgstr "尝试对焦:相机已失焦"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:539
|
||||
msgid "Out of Storage Space"
|
||||
msgstr "存储空间不足"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:544
|
||||
msgid "Speed Too Low"
|
||||
msgstr "车速过慢"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:549 selfdrive/controls/lib/events.py:553
|
||||
msgid "NEOS Update Required"
|
||||
msgstr "NEOS 需要更新"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:550
|
||||
msgid "Please Wait for Update"
|
||||
msgstr "更新中请稍候"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:558 selfdrive/controls/lib/events.py:562
|
||||
msgid "No Data from Device Sensors"
|
||||
msgstr "未收到装置传感器数据"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:559 selfdrive/controls/lib/events.py:572
|
||||
#: selfdrive/controls/lib/events.py:669
|
||||
msgid "Reboot your Device"
|
||||
msgstr "请重启装置"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:571 selfdrive/controls/lib/events.py:575
|
||||
msgid "Speaker not found"
|
||||
msgstr "找不到音效装置"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:579
|
||||
msgid "Distraction Level Too High"
|
||||
msgstr "驾驶分心太多次"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:583
|
||||
msgid "System Overheated"
|
||||
msgstr "系统过热"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:584
|
||||
msgid "System overheated"
|
||||
msgstr "系统过热"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:588 selfdrive/controls/lib/events.py:589
|
||||
msgid "Gear not D"
|
||||
msgstr "不在 D 档位"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:594
|
||||
#, fuzzy
|
||||
msgid "Calibration Invalid"
|
||||
msgstr "正在校准中"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:595
|
||||
#, fuzzy
|
||||
msgid "Reposition Device and Recalibrate"
|
||||
msgstr "校准无效:请将装置放于新的位置并重新校准"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:598 selfdrive/controls/lib/events.py:599
|
||||
msgid "Calibration Invalid: Reposition Device & Recalibrate"
|
||||
msgstr "校准无效:请将装置放于新的位置并重新校准"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:603 selfdrive/controls/lib/events.py:605
|
||||
msgid "Calibration in Progress"
|
||||
msgstr "正在校准中"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:609
|
||||
msgid "Door Open"
|
||||
msgstr "车门开启"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:610
|
||||
msgid "Door open"
|
||||
msgstr "车门未关"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:614
|
||||
msgid "Seatbelt Unlatched"
|
||||
msgstr "安全带未繫"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:615
|
||||
msgid "Seatbelt unlatched"
|
||||
msgstr "安全带未繫"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:619 selfdrive/controls/lib/events.py:620
|
||||
msgid "ESP Off"
|
||||
msgstr "ESP 关闭"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:624 selfdrive/controls/lib/events.py:625
|
||||
msgid "Low Battery"
|
||||
msgstr "电量过低"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:629 selfdrive/controls/lib/events.py:630
|
||||
msgid "Communication Issue between Processes"
|
||||
msgstr "行程间出现通讯问题"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:635 selfdrive/controls/lib/events.py:636
|
||||
msgid "Radar Communication Issue"
|
||||
msgstr "雷达通讯出现问题"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:641 selfdrive/controls/lib/events.py:642
|
||||
#: selfdrive/controls/lib/events.py:646 selfdrive/controls/lib/events.py:647
|
||||
msgid "Radar Error: Restart the Car"
|
||||
msgstr "雷达讯号错误:请重新发动车辆"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:651 selfdrive/controls/lib/events.py:652
|
||||
msgid "Driving model lagging"
|
||||
msgstr "操控模型有延迟"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:656 selfdrive/controls/lib/events.py:657
|
||||
msgid "Vision Model Output Uncertain"
|
||||
msgstr "视觉模型判断不明确"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:661 selfdrive/controls/lib/events.py:662
|
||||
msgid "Device Fell Off Mount"
|
||||
msgstr "装置掉落侦测"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:666 selfdrive/controls/lib/events.py:672
|
||||
msgid "Low Memory: Reboot Your Device"
|
||||
msgstr "记忆体不足:请重启您的装置"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:668
|
||||
msgid "RAM Critically Low"
|
||||
msgstr "记忆体严重不足"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:677 selfdrive/controls/lib/events.py:678
|
||||
msgid "Controls Failed"
|
||||
msgstr "控制发生错误"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:682
|
||||
msgid "Controls Mismatch"
|
||||
msgstr "控制不匹配"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:686 selfdrive/controls/lib/events.py:688
|
||||
#: selfdrive/controls/lib/events.py:692
|
||||
msgid "CAN Error: Check Connections"
|
||||
msgstr "CAN 讯号错误:请检查线路"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:696 selfdrive/controls/lib/events.py:702
|
||||
msgid "LKAS Fault: Restart the Car"
|
||||
msgstr "LKAS 错误:请重新发动车辆"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:698
|
||||
msgid "LKAS Fault: Restart the car to engage"
|
||||
msgstr "LKAS 错误:请重新发动车辆"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:706 selfdrive/controls/lib/events.py:712
|
||||
#: selfdrive/controls/lib/events.py:795
|
||||
msgid "Cruise Fault: Restart the Car"
|
||||
msgstr "巡航系统错误:请重新发动车辆"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:708 selfdrive/controls/lib/events.py:791
|
||||
msgid "Cruise Fault: Restart the car to engage"
|
||||
msgstr "巡航系统错误:请重新发动车辆"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:716
|
||||
msgid "Gas Fault: Restart the Car"
|
||||
msgstr "油门错误:请重新发动车辆"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:717
|
||||
msgid "Gas Error: Restart the Car"
|
||||
msgstr "油门错误:请重新发动车辆"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:722
|
||||
#, fuzzy
|
||||
msgid ""
|
||||
"Reverse\n"
|
||||
"Gear"
|
||||
msgstr "切换至倒车档"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:726
|
||||
msgid "Reverse Gear"
|
||||
msgstr "切换至倒车档"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:731
|
||||
msgid "Cruise Is Off"
|
||||
msgstr "巡航系统关闭"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:735 selfdrive/controls/lib/events.py:736
|
||||
msgid "Planner Solution Error"
|
||||
msgstr "Planner Solution 错误"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:740 selfdrive/controls/lib/events.py:742
|
||||
#: selfdrive/controls/lib/events.py:746
|
||||
msgid "Harness Malfunction"
|
||||
msgstr "Harness 故障"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:743
|
||||
msgid "Please Check Hardware"
|
||||
msgstr "请检查硬体"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:751 selfdrive/controls/lib/events.py:760
|
||||
msgid "openpilot Canceled"
|
||||
msgstr "openpilot 已取消"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:752
|
||||
msgid "No close lead car"
|
||||
msgstr "前方没有车辆"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:755
|
||||
msgid "No Close Lead Car"
|
||||
msgstr "前方没有车辆"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:761
|
||||
msgid "Speed too low"
|
||||
msgstr "车速过慢"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:768 selfdrive/controls/lib/events.py:773
|
||||
msgid "Speed Too High"
|
||||
msgstr "车速过快"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:769
|
||||
msgid "Slow down to resume operation"
|
||||
msgstr "请减速后再启用"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:774
|
||||
msgid "Slow down to engage"
|
||||
msgstr "请减速后再启用"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:781
|
||||
msgid "Please connect to Internet"
|
||||
msgstr "请连接网路"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:782
|
||||
msgid "An Update Check Is Required to Engage"
|
||||
msgstr "需检查更新后才能启用"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:785
|
||||
msgid "Please Connect to Internet"
|
||||
msgstr "请连接网路"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:801
|
||||
msgid "Left ALC will start in 3s"
|
||||
msgstr "准备自动切至左车道"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:809
|
||||
msgid "Right ALC will start in 3s"
|
||||
msgstr "准备自动切至右车道"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:817
|
||||
msgid "STEERING REQUIRED: Lane Keeping OFF"
|
||||
msgstr "请接管方向盘:车道维持关闭"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:825
|
||||
msgid "STEERING REQUIRED: Blinkers ON"
|
||||
msgstr "请接管方向盘:方向灯开启"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:833 selfdrive/controls/lib/events.py:838
|
||||
msgid "Lead Car Is Moving"
|
||||
msgstr "前方车辆车移动中"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:847
|
||||
msgid "WARNING"
|
||||
msgstr "警告"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:848
|
||||
msgid "Grab wheel to start bypass"
|
||||
msgstr "请握好方向盘以绕过时间限制"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:855
|
||||
msgid "BYPASSING"
|
||||
msgstr "绕过时间限制中"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:856
|
||||
msgid "HOLD WHEEL"
|
||||
msgstr "握好方向盘"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:863
|
||||
msgid "Bypassed!"
|
||||
msgstr "时间限制已绕过"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:864
|
||||
msgid "Release wheel when ready"
|
||||
msgstr "准备好后请松开放向盘"
|
||||
BIN
selfdrive/assets/locales/zh-TW/LC_MESSAGES/events.mo
Normal file
542
selfdrive/assets/locales/zh-TW/LC_MESSAGES/events.po
Normal file
@@ -0,0 +1,542 @@
|
||||
# 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.
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2020-10-15 13:37+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"
|
||||
"Language: zh-TW\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:153
|
||||
msgid "openpilot Unavailable"
|
||||
msgstr "無法使用 openpilot"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:160 selfdrive/controls/lib/events.py:167
|
||||
msgid "TAKE CONTROL IMMEDIATELY"
|
||||
msgstr "即刻接管控制"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:187 selfdrive/controls/lib/events.py:328
|
||||
#: selfdrive/controls/lib/events.py:354 selfdrive/controls/lib/events.py:418
|
||||
#: selfdrive/controls/lib/events.py:470 selfdrive/controls/lib/events.py:522
|
||||
#: selfdrive/controls/lib/events.py:532
|
||||
msgid "TAKE CONTROL"
|
||||
msgstr "接管控制"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:188
|
||||
#, fuzzy, python-format
|
||||
msgid "Steer Unavailable Below %(speed)d %(unit)s"
|
||||
msgstr "橫向控制暫時失效,車速低於 %d %s"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:196
|
||||
#, fuzzy, python-format
|
||||
msgid "Calibration in Progress: %d%%"
|
||||
msgstr "正在校準中:%d%%"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:197
|
||||
#, fuzzy, python-format
|
||||
msgid "Drive Above %(speed)d %(unit)s"
|
||||
msgstr "車速請高於 %(speed)d %(unit)s"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:204
|
||||
msgid "Poor GPS reception"
|
||||
msgstr "GPS 訊號不良"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:205
|
||||
msgid "If sky is visible, contact support"
|
||||
msgstr "如果您不在地下室/隧道,請聯系客服"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:205
|
||||
msgid "Check GPS antenna placement"
|
||||
msgstr "請檢查 GPS 天線位置"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:210
|
||||
msgid "Cruise Mode Disabled"
|
||||
msgstr "巡航模式關閉"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:212
|
||||
msgid "Main Switch Off"
|
||||
msgstr "主開關已關閉"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:222
|
||||
msgid "DEBUG ALERT"
|
||||
msgstr "除錯用警示訊息"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:230
|
||||
msgid "Be ready to take over at any time"
|
||||
msgstr "請準備好隨時接管"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:231 selfdrive/controls/lib/events.py:239
|
||||
#: selfdrive/controls/lib/events.py:247 selfdrive/controls/lib/events.py:255
|
||||
msgid "Always keep hands on wheel and eyes on road"
|
||||
msgstr "將手放在方向盤上並持續監視路況"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:238
|
||||
msgid "WARNING: This branch is not tested"
|
||||
msgstr "注意:這個分支未經過測試"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:246
|
||||
msgid "Dashcam mode"
|
||||
msgstr "行車記錄模式"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:254
|
||||
msgid "Dashcam mode for unsupported car"
|
||||
msgstr "行車記錄模式 (尚未支援車種)"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:262
|
||||
msgid "Unsupported Giraffe Configuration"
|
||||
msgstr "未支援的 Giraffe 設置"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:263
|
||||
msgid "Visit comma.ai/tg"
|
||||
msgstr "請查閱 comma.ai/tg"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:270
|
||||
msgid "White Panda Is No Longer Supported"
|
||||
msgstr "不再支援 White Panda"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:271
|
||||
msgid "Upgrade to comma two or black panda"
|
||||
msgstr "請升級至 comma two 或是使用 black panda"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:274
|
||||
msgid "White panda is no longer supported"
|
||||
msgstr "不再支援 White panda"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:279
|
||||
msgid "Stock LKAS is turned on"
|
||||
msgstr "原廠 LKAS 已開啟"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:280
|
||||
msgid "Turn off stock LKAS to engage"
|
||||
msgstr "需關閉原廠 LKAS 才能啟用"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:288
|
||||
msgid "Community Feature Detected"
|
||||
msgstr "檢測到社群開發功能"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:289
|
||||
msgid "Enable Community Features in Developer Settings"
|
||||
msgstr "請至開發人員設定裡啟用社群開發功能"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:296
|
||||
msgid "Dashcam Mode"
|
||||
msgstr "行車記錄模式"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:297
|
||||
msgid "Car Unrecognized"
|
||||
msgstr "無法辨識車款"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:304 selfdrive/controls/lib/events.py:312
|
||||
#: selfdrive/controls/lib/events.py:320
|
||||
msgid "BRAKE!"
|
||||
msgstr "剎車!"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:305
|
||||
msgid "Stock AEB: Risk of Collision"
|
||||
msgstr "有碰撞的風險"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:313
|
||||
msgid "Stock FCW: Risk of Collision"
|
||||
msgstr "有碰撞的風險"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:321
|
||||
msgid "Risk of Collision"
|
||||
msgstr "有碰撞的風險"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:329
|
||||
msgid "Lane Departure Detected"
|
||||
msgstr "偏離車道"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:338
|
||||
msgid "openpilot will not brake while gas pressed"
|
||||
msgstr "在您踩著油門的時候 openpilot 將不會剎車"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:346
|
||||
msgid "Vehicle Parameter Identification Failed"
|
||||
msgstr "車子參數識別失敗"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:355 selfdrive/controls/lib/events.py:523
|
||||
#: selfdrive/controls/lib/events.py:526
|
||||
msgid "Steering Temporarily Unavailable"
|
||||
msgstr "橫向控制暫時失效"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:362
|
||||
msgid "KEEP EYES ON ROAD: Driver Distracted"
|
||||
msgstr "注意路況:駕駛分心"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:370
|
||||
msgid "KEEP EYES ON ROAD"
|
||||
msgstr "注意路況"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:371
|
||||
msgid "Driver Appears Distracted"
|
||||
msgstr "駕駛分心"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:378 selfdrive/controls/lib/events.py:402
|
||||
msgid "DISENGAGE IMMEDIATELY"
|
||||
msgstr "立即解除"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:379
|
||||
msgid "Driver Was Distracted"
|
||||
msgstr "駕駛分心"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:386
|
||||
msgid "TOUCH STEERING WHEEL: No Face Detected"
|
||||
msgstr "請觸碰方向盤:未偵測到駕駛面容"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:394
|
||||
msgid "TOUCH STEERING WHEEL"
|
||||
msgstr "請觸碰方向盤"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:395
|
||||
msgid "Driver Is Unresponsive"
|
||||
msgstr "駕駛沒有反應"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:403
|
||||
msgid "Driver Was Unresponsive"
|
||||
msgstr "駕駛沒有反應"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:410
|
||||
msgid "CHECK DRIVER FACE VISIBILITY"
|
||||
msgstr "請檢查駕駛面部的可見度"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:411
|
||||
msgid "Driver Monitor Model Output Uncertain"
|
||||
msgstr "駕駛監控模型判斷不明確"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:419
|
||||
msgid "Resume Driving Manually"
|
||||
msgstr "請自行恢復駕駛"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:426
|
||||
msgid "STOPPED"
|
||||
msgstr "已停止"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:427
|
||||
msgid "Press Resume to Move"
|
||||
msgstr "請按 RES 繼續"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:438
|
||||
msgid "Steer Left to Start Lane Change"
|
||||
msgstr "請往左打方向盤切換至左車道"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:439 selfdrive/controls/lib/events.py:447
|
||||
#: selfdrive/controls/lib/events.py:455 selfdrive/controls/lib/events.py:463
|
||||
#: selfdrive/controls/lib/events.py:802 selfdrive/controls/lib/events.py:810
|
||||
msgid "Monitor Other Vehicles"
|
||||
msgstr "請注意其它車輛"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:446
|
||||
msgid "Steer Right to Start Lane Change"
|
||||
msgstr "請往右打方向盤切換至右車道"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:454
|
||||
msgid "Car Detected in Blindspot"
|
||||
msgstr "盲點偵測到車輛"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:462
|
||||
msgid "Changing Lane"
|
||||
msgstr "切換車道中"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:471
|
||||
msgid "Turn Exceeds Steering Limit"
|
||||
msgstr "彎道超過橫向操控限制"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:496
|
||||
msgid "Brake Hold Active"
|
||||
msgstr "駐車煞車已啟用"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:501
|
||||
msgid "Park Brake Engaged"
|
||||
msgstr "電子駐車已啟動"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:506
|
||||
msgid "Pedal Pressed During Attempt"
|
||||
msgstr "啟用時偵測到駕駛踩踏油門/剎車"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:517
|
||||
msgid "Enable Adaptive Cruise"
|
||||
msgstr "啟用主動定速巡航"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:533
|
||||
msgid "Attempting Refocus: Camera Focus Invalid"
|
||||
msgstr "嘗試對焦:相機已失焦"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:539
|
||||
msgid "Out of Storage Space"
|
||||
msgstr "儲存空間不足"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:544
|
||||
msgid "Speed Too Low"
|
||||
msgstr "車速過慢"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:549 selfdrive/controls/lib/events.py:553
|
||||
msgid "NEOS Update Required"
|
||||
msgstr "NEOS 需要更新"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:550
|
||||
msgid "Please Wait for Update"
|
||||
msgstr "更新中請稍候"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:558 selfdrive/controls/lib/events.py:562
|
||||
msgid "No Data from Device Sensors"
|
||||
msgstr "未收到裝置傳感器數據"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:559 selfdrive/controls/lib/events.py:572
|
||||
#: selfdrive/controls/lib/events.py:669
|
||||
msgid "Reboot your Device"
|
||||
msgstr "請重啟裝置"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:571 selfdrive/controls/lib/events.py:575
|
||||
msgid "Speaker not found"
|
||||
msgstr "找不到音效裝置"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:579
|
||||
msgid "Distraction Level Too High"
|
||||
msgstr "駕駛分心太多次"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:583
|
||||
msgid "System Overheated"
|
||||
msgstr "系統過熱"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:584
|
||||
msgid "System overheated"
|
||||
msgstr "系統過熱"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:588 selfdrive/controls/lib/events.py:589
|
||||
msgid "Gear not D"
|
||||
msgstr "不在 D 檔位"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:594
|
||||
#, fuzzy
|
||||
msgid "Calibration Invalid"
|
||||
msgstr "正在校準中"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:595
|
||||
#, fuzzy
|
||||
msgid "Reposition Device and Recalibrate"
|
||||
msgstr "校準無效:請將裝置放於新的位置並重新校準"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:598 selfdrive/controls/lib/events.py:599
|
||||
msgid "Calibration Invalid: Reposition Device & Recalibrate"
|
||||
msgstr "校準無效:請將裝置放於新的位置並重新校準"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:603 selfdrive/controls/lib/events.py:605
|
||||
msgid "Calibration in Progress"
|
||||
msgstr "正在校準中"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:609
|
||||
msgid "Door Open"
|
||||
msgstr "車門開啟"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:610
|
||||
msgid "Door open"
|
||||
msgstr "車門未關"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:614
|
||||
msgid "Seatbelt Unlatched"
|
||||
msgstr "安全帶未繫"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:615
|
||||
msgid "Seatbelt unlatched"
|
||||
msgstr "安全帶未繫"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:619 selfdrive/controls/lib/events.py:620
|
||||
msgid "ESP Off"
|
||||
msgstr "ESP 關閉"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:624 selfdrive/controls/lib/events.py:625
|
||||
msgid "Low Battery"
|
||||
msgstr "電量過低"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:629 selfdrive/controls/lib/events.py:630
|
||||
msgid "Communication Issue between Processes"
|
||||
msgstr "行程間出現通訊問題"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:635 selfdrive/controls/lib/events.py:636
|
||||
msgid "Radar Communication Issue"
|
||||
msgstr "雷達通訊出現問題"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:641 selfdrive/controls/lib/events.py:642
|
||||
#: selfdrive/controls/lib/events.py:646 selfdrive/controls/lib/events.py:647
|
||||
msgid "Radar Error: Restart the Car"
|
||||
msgstr "雷達訊號錯誤:請重新發動車輛"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:651 selfdrive/controls/lib/events.py:652
|
||||
msgid "Driving model lagging"
|
||||
msgstr "操控模型有延遲"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:656 selfdrive/controls/lib/events.py:657
|
||||
msgid "Vision Model Output Uncertain"
|
||||
msgstr "視覺模型判斷不明確"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:661 selfdrive/controls/lib/events.py:662
|
||||
msgid "Device Fell Off Mount"
|
||||
msgstr "裝置掉落偵測"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:666 selfdrive/controls/lib/events.py:672
|
||||
msgid "Low Memory: Reboot Your Device"
|
||||
msgstr "記憶體不足:請重啟您的裝置"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:668
|
||||
msgid "RAM Critically Low"
|
||||
msgstr "記憶體嚴重不足"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:677 selfdrive/controls/lib/events.py:678
|
||||
msgid "Controls Failed"
|
||||
msgstr "控制發生錯誤"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:682
|
||||
msgid "Controls Mismatch"
|
||||
msgstr "控制不匹配"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:686 selfdrive/controls/lib/events.py:688
|
||||
#: selfdrive/controls/lib/events.py:692
|
||||
msgid "CAN Error: Check Connections"
|
||||
msgstr "CAN 訊號錯誤:請檢查線路"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:696 selfdrive/controls/lib/events.py:702
|
||||
msgid "LKAS Fault: Restart the Car"
|
||||
msgstr "LKAS 錯誤:請重新發動車輛"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:698
|
||||
msgid "LKAS Fault: Restart the car to engage"
|
||||
msgstr "LKAS 錯誤:請重新發動車輛"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:706 selfdrive/controls/lib/events.py:712
|
||||
#: selfdrive/controls/lib/events.py:795
|
||||
msgid "Cruise Fault: Restart the Car"
|
||||
msgstr "巡航系統錯誤:請重新發動車輛"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:708 selfdrive/controls/lib/events.py:791
|
||||
msgid "Cruise Fault: Restart the car to engage"
|
||||
msgstr "巡航系統錯誤:請重新發動車輛"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:716
|
||||
msgid "Gas Fault: Restart the Car"
|
||||
msgstr "油門錯誤:請重新發動車輛"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:717
|
||||
msgid "Gas Error: Restart the Car"
|
||||
msgstr "油門錯誤:請重新發動車輛"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:722
|
||||
#, fuzzy
|
||||
msgid ""
|
||||
"Reverse\n"
|
||||
"Gear"
|
||||
msgstr "切換至倒車檔"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:726
|
||||
msgid "Reverse Gear"
|
||||
msgstr "切換至倒車檔"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:731
|
||||
msgid "Cruise Is Off"
|
||||
msgstr "巡航系統關閉"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:735 selfdrive/controls/lib/events.py:736
|
||||
msgid "Planner Solution Error"
|
||||
msgstr "Planner Solution 錯誤"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:740 selfdrive/controls/lib/events.py:742
|
||||
#: selfdrive/controls/lib/events.py:746
|
||||
msgid "Harness Malfunction"
|
||||
msgstr "Harness 故障"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:743
|
||||
msgid "Please Check Hardware"
|
||||
msgstr "請檢查硬體"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:751 selfdrive/controls/lib/events.py:760
|
||||
msgid "openpilot Canceled"
|
||||
msgstr "openpilot 已取消"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:752
|
||||
msgid "No close lead car"
|
||||
msgstr "前方沒有車輛"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:755
|
||||
msgid "No Close Lead Car"
|
||||
msgstr "前方沒有車輛"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:761
|
||||
msgid "Speed too low"
|
||||
msgstr "車速過慢"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:768 selfdrive/controls/lib/events.py:773
|
||||
msgid "Speed Too High"
|
||||
msgstr "車速過快"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:769
|
||||
msgid "Slow down to resume operation"
|
||||
msgstr "請減速後再啟用"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:774
|
||||
msgid "Slow down to engage"
|
||||
msgstr "請減速後再啟用"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:781
|
||||
msgid "Please connect to Internet"
|
||||
msgstr "請連接網路"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:782
|
||||
msgid "An Update Check Is Required to Engage"
|
||||
msgstr "需檢查更新後才能啟用"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:785
|
||||
msgid "Please Connect to Internet"
|
||||
msgstr "請連接網路"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:801
|
||||
msgid "Left ALC will start in 3s"
|
||||
msgstr "準備自動切至左車道"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:809
|
||||
msgid "Right ALC will start in 3s"
|
||||
msgstr "準備自動切至右車道"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:817
|
||||
msgid "STEERING REQUIRED: Lane Keeping OFF"
|
||||
msgstr "請接管方向盤:車道維持關閉"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:825
|
||||
msgid "STEERING REQUIRED: Blinkers ON"
|
||||
msgstr "請接管方向盤:方向燈開啟"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:833 selfdrive/controls/lib/events.py:838
|
||||
msgid "Lead Car Is Moving"
|
||||
msgstr "前方車輛車移動中"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:847
|
||||
msgid "WARNING"
|
||||
msgstr "警告"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:848
|
||||
msgid "Grab wheel to start bypass"
|
||||
msgstr "請握好方向盤以繞過時間限制"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:855
|
||||
msgid "BYPASSING"
|
||||
msgstr "繞過時間限制中"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:856
|
||||
msgid "HOLD WHEEL"
|
||||
msgstr "握好方向盤"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:863
|
||||
msgid "Bypassed!"
|
||||
msgstr "時間限制已繞過"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:864
|
||||
msgid "Release wheel when ready"
|
||||
msgstr "準備好後請鬆開放向盤"
|
||||
BIN
selfdrive/assets/navigation/direction_arrive.png
Normal file
|
After Width: | Height: | Size: 1.2 KiB |
BIN
selfdrive/assets/navigation/direction_arrive_left.png
Normal file
|
After Width: | Height: | Size: 1.5 KiB |
BIN
selfdrive/assets/navigation/direction_arrive_right.png
Normal file
|
After Width: | Height: | Size: 1.5 KiB |
BIN
selfdrive/assets/navigation/direction_arrive_straight.png
Normal file
|
After Width: | Height: | Size: 1.2 KiB |
BIN
selfdrive/assets/navigation/direction_close.png
Normal file
|
After Width: | Height: | Size: 865 B |
BIN
selfdrive/assets/navigation/direction_continue.png
Normal file
|
After Width: | Height: | Size: 1.0 KiB |
BIN
selfdrive/assets/navigation/direction_continue_left.png
Normal file
|
After Width: | Height: | Size: 1.4 KiB |