add tang dmi24

This commit is contained in:
Comma Device
2026-02-01 16:59:39 +08:00
parent 815dc482cc
commit be8e8fcae4
22 changed files with 398 additions and 481 deletions

View File

@@ -1,3 +1,7 @@
Carrot2-v9 (2026-02-01)
========================
* 添加唐dmi24
Carrot2-v9 (2026-01-31)
========================
* Byd离手修正

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@@ -9,6 +9,7 @@ legend = ["LAT_ACCEL_FACTOR", "MAX_LAT_ACCEL_MEASURED", "FRICTION"]
"BYD_HAN_EV_20" = [1.0, 2.5, 0.15]
"BYD_TANG_DM" = [1.0, 2.5, 0.15]
"BYD_TANG_DMI_21" = [1.0, 2.5, 0.15]
"BYD_TANG_DMI_24" = [1.0, 2.5, 0.15]
"BYD_TANG_DMP_22" = [1.0, 2.5, 0.15]
"BYD_TANG_DMP_23" = [1.0, 2.5, 0.15]
"BYD_SONG_PLUS_DMI_21" = [1.0, 2.5, 0.15]

View File

@@ -36,215 +36,215 @@ BS_:
BU_: XXX
BO_ 85 CID_SRPYCI: 8 XXX
SG_ sig_efveom : 40|1@1+ (1,0) [0|1] "" XXX
SG_ sig_uxvepe : 56|8@1+ (1,0) [0|255] "" XXX
BO_ 85 CID_QHKVHP: 8 XXX
SG_ sig_qklepv : 40|1@1+ (1,0) [0|1] "" XXX
SG_ sig_ldptaz : 56|8@1+ (1,0) [0|255] "" XXX
BO_ 287 CID_YXJGGX: 5 XXX
SG_ sig_kvntat : 0|16@1- (0.1,0) [-450|450] "" XXX
SG_ sig_hndniz : 16|8@1+ (4,0) [0|1020] "" XXX
SG_ sig_yxuxyx : 32|8@1+ (1,0) [0|255] "" XXX
BO_ 287 CID_ZZKUMJ: 5 XXX
SG_ sig_eumvcf : 0|16@1- (0.1,0) [-450|450] "" XXX
SG_ sig_udywxb : 16|8@1+ (4,0) [0|1020] "" XXX
SG_ sig_tnlzfc : 32|8@1+ (1,0) [0|255] "" XXX
BO_ 289 CID_BFAIKC: 8 XXX
SG_ sig_hyxvqm : 0|12@1+ (1,0) [0|255] "" XXX
BO_ 289 CID_VBIPRG: 8 XXX
SG_ sig_iuwwpl : 0|12@1+ (1,0) [0|255] "" XXX
BO_ 301 CID_ZNACHQ: 8 XXX
SG_ sig_bwmkny : 0|1@0+ (1,0) [0|1] "" XXX
SG_ sig_kgthpb : 1|1@0+ (1,0) [0|1] "" XXX
SG_ sig_qilxgm : 2|1@0+ (1,0) [0|1] "" XXX
SG_ sig_jsvdww : 3|1@0+ (1,0) [0|1] "" XXX
SG_ sig_yeqynq : 4|1@0+ (1,0) [0|1] "" XXX
SG_ sig_bmgwao : 6|1@0+ (1,0) [0|1] "" XXX
SG_ sig_ubnhfk : 8|1@0+ (1,0) [0|1] "" XXX
SG_ sig_wvxqci : 55|1@0+ (1,0) [0|1] "" XXX
BO_ 301 CID_UEOLTV: 8 XXX
SG_ sig_fbhfzt : 0|1@0+ (1,0) [0|1] "" XXX
SG_ sig_dusood : 1|1@0+ (1,0) [0|1] "" XXX
SG_ sig_xaicfx : 2|1@0+ (1,0) [0|1] "" XXX
SG_ sig_hxqwnu : 3|1@0+ (1,0) [0|1] "" XXX
SG_ sig_ofbknt : 4|1@0+ (1,0) [0|1] "" XXX
SG_ sig_iytefc : 6|1@0+ (1,0) [0|1] "" XXX
SG_ sig_tihxrh : 8|1@0+ (1,0) [0|1] "" XXX
SG_ sig_egsfet : 55|1@0+ (1,0) [0|1] "" XXX
BO_ 307 CID_XIPPNC: 8 XXX
SG_ sig_sdwfvm : 0|1@0+ (1,0) [0|1] "" XXX
SG_ sig_hjkzwm : 1|1@1+ (1,0) [0|1] "" XXX
SG_ sig_jfwqgm : 2|1@1+ (1,0) [0|1] "" XXX
SG_ sig_xkilpm : 3|1@1+ (1,0) [0|1] "" XXX
SG_ sig_qjosre : 4|1@0+ (1,0) [0|1] "" XXX
SG_ sig_thggnh : 5|1@0+ (1,0) [0|1] "" XXX
SG_ sig_cyqjbv : 7|1@0+ (1,0) [0|1] "" XXX
SG_ sig_ssywkq : 36|3@1+ (1,0) [0|7] "" XXX
SG_ sig_florjc : 40|1@0+ (1,0) [0|1] "" XXX
SG_ sig_qwydff : 63|4@0+ (1,0) [0|15] "" XXX
BO_ 307 CID_QBTCGK: 8 XXX
SG_ sig_wyxize : 0|1@0+ (1,0) [0|1] "" XXX
SG_ sig_jsrpyi : 1|1@1+ (1,0) [0|1] "" XXX
SG_ sig_ylewed : 2|1@1+ (1,0) [0|1] "" XXX
SG_ sig_dokzwc : 3|1@1+ (1,0) [0|1] "" XXX
SG_ sig_icpdrq : 4|1@0+ (1,0) [0|1] "" XXX
SG_ sig_qpjnlb : 5|1@0+ (1,0) [0|1] "" XXX
SG_ sig_vwwfgj : 7|1@0+ (1,0) [0|1] "" XXX
SG_ sig_ebrjnq : 36|3@1+ (1,0) [0|7] "" XXX
SG_ sig_pwbqsc : 40|1@0+ (1,0) [0|1] "" XXX
SG_ sig_ttnqcj : 63|4@0+ (1,0) [0|15] "" XXX
BO_ 482 CID_UUYTRS: 8 XXX
SG_ sig_hzdvjw : 0|10@1- (0.01,0) [0|5] "" XXX
SG_ sig_xmkmhe : 10|10@1- (0.01,0) [-5|0] "" XXX
SG_ sig_amipgq : 20|1@0+ (1,0) [0|1] "" XXX
SG_ sig_ypbjmb : 21|1@0+ (1,0) [0|1] "" XXX
SG_ sig_ymyxvc : 22|2@1+ (1,0) [0|1] "" XXX
SG_ sig_vohxni : 24|16@1- (0.1,0) [-780|779.9] "" XXX
SG_ sig_tvvfyd : 47|8@0+ (1,0) [0|255] "" XXX
SG_ sig_ylhywp : 48|4@1+ (1,0) [0|15] "" XXX
SG_ sig_yxuxyx : 52|4@1+ (1,0) [0|15] "" XXX
SG_ sig_uxvepe : 56|8@1+ (1,0) [0|255] "" XXX
BO_ 482 CID_VVFVXZ: 8 XXX
SG_ sig_oovlwe : 0|10@1- (0.01,0) [0|5] "" XXX
SG_ sig_cebiug : 10|10@1- (0.01,0) [-5|0] "" XXX
SG_ sig_bhhzpn : 20|1@0+ (1,0) [0|1] "" XXX
SG_ sig_qscaec : 21|1@0+ (1,0) [0|1] "" XXX
SG_ sig_rfkczs : 22|2@1+ (1,0) [0|1] "" XXX
SG_ sig_otmfzz : 24|16@1- (0.1,0) [-780|779.9] "" XXX
SG_ sig_ynvdhx : 47|8@0+ (1,0) [0|255] "" XXX
SG_ sig_eqessi : 48|4@1+ (1,0) [0|15] "" XXX
SG_ sig_tnlzfc : 52|4@1+ (1,0) [0|15] "" XXX
SG_ sig_ldptaz : 56|8@1+ (1,0) [0|255] "" XXX
BO_ 508 CID_EPSQAZ: 8 XXX
SG_ sig_txwxva : 0|2@1+ (1,0) [0|1] "" XXX
SG_ sig_ngzakq : 2|1@1+ (1,0) [0|1] "" XXX
SG_ sig_oefuvt : 3|1@0+ (1,0) [0|1] "" XXX
SG_ sig_chyhsk : 4|12@1- (1,0) [-2048|2047] "" XXX
SG_ sig_tcivwq : 16|16@1- (0.1,0) [-780|779.9] "Deg" XXX
SG_ sig_lmqnos : 32|12@1- (1,0) [0|63] "" XXX
SG_ sig_gnftpv : 44|1@0+ (1,0) [0|1] "" XXX
SG_ sig_keozgi : 45|1@1+ (1,0) [0|255] "" XXX
SG_ sig_sydhgi : 46|1@1+ (1,0) [0|1] "" XXX
SG_ sig_nsbthq : 47|1@0+ (1,0) [0|3] "" XXX
SG_ sig_wdpgdn : 48|4@1+ (1,0) [0|15] "" XXX
SG_ sig_yxuxyx : 52|4@1+ (1,0) [0|15] "" XXX
SG_ sig_uxvepe : 56|8@1+ (1,0) [0|255] "" XXX
BO_ 508 CID_HEARIN: 8 XXX
SG_ sig_xhyzub : 0|2@1+ (1,0) [0|1] "" XXX
SG_ sig_mxlfeh : 2|1@1+ (1,0) [0|1] "" XXX
SG_ sig_upyhyg : 3|1@0+ (1,0) [0|1] "" XXX
SG_ sig_fbdkbh : 4|12@1- (1,0) [-2048|2047] "" XXX
SG_ sig_jztunu : 16|16@1- (0.1,0) [-780|779.9] "Deg" XXX
SG_ sig_twrzbs : 32|12@1- (1,0) [0|63] "" XXX
SG_ sig_jvhlom : 44|1@0+ (1,0) [0|1] "" XXX
SG_ sig_nzdewb : 45|1@1+ (1,0) [0|255] "" XXX
SG_ sig_zanljc : 46|1@1+ (1,0) [0|1] "" XXX
SG_ sig_xicltr : 47|1@0+ (1,0) [0|3] "" XXX
SG_ sig_npwtrq : 48|4@1+ (1,0) [0|15] "" XXX
SG_ sig_tnlzfc : 52|4@1+ (1,0) [0|15] "" XXX
SG_ sig_ldptaz : 56|8@1+ (1,0) [0|255] "" XXX
BO_ 578 CID_BRBQUE: 8 XXX
SG_ sig_yvcicn : 30|7@0+ (1,0) [0|127] "" XXX
SG_ sig_fwiqsz : 37|1@0+ (1,0) [0|1] "" XXX
SG_ sig_rnetec : 40|3@1+ (1,0) [0|7] "" XXX
SG_ sig_yxuxyx : 55|4@0+ (1,0) [0|15] "" XXX
SG_ sig_uxvepe : 56|8@1+ (1,0) [0|255] "" XXX
BO_ 578 CID_GBEOYM: 8 XXX
SG_ sig_taqabp : 30|7@0+ (1,0) [0|127] "" XXX
SG_ sig_bxoxuf : 37|1@0+ (1,0) [0|1] "" XXX
SG_ sig_cpwfga : 40|3@1+ (1,0) [0|7] "" XXX
SG_ sig_tnlzfc : 55|4@0+ (1,0) [0|15] "" XXX
SG_ sig_ldptaz : 56|8@1+ (1,0) [0|255] "" XXX
BO_ 660 CID_NXTUTU: 8 XXX
SG_ sig_bwmkny : 1|2@0+ (1,0) [0|3] "" XXX
SG_ sig_kgthpb : 3|2@0+ (1,0) [0|3] "" XXX
SG_ sig_qilxgm : 5|2@0+ (1,0) [0|3] "" XXX
SG_ sig_jsvdww : 7|2@0+ (1,0) [0|3] "" XXX
SG_ sig_bmgwao : 17|2@0+ (1,0) [0|3] "" XXX
SG_ sig_yeqynq : 19|2@0+ (1,0) [0|3] "" XXX
SG_ sig_mcduoj : 21|2@0+ (1,0) [0|3] "" XXX
SG_ sig_oqrqaa : 26|1@0+ (1,0) [0|1] "" XXX
BO_ 660 CID_YFVVCJ: 8 XXX
SG_ sig_fbhfzt : 1|2@0+ (1,0) [0|3] "" XXX
SG_ sig_dusood : 3|2@0+ (1,0) [0|3] "" XXX
SG_ sig_xaicfx : 5|2@0+ (1,0) [0|3] "" XXX
SG_ sig_hxqwnu : 7|2@0+ (1,0) [0|3] "" XXX
SG_ sig_iytefc : 17|2@0+ (1,0) [0|3] "" XXX
SG_ sig_ofbknt : 19|2@0+ (1,0) [0|3] "" XXX
SG_ sig_xwhmgf : 21|2@0+ (1,0) [0|3] "" XXX
SG_ sig_yytacs : 26|1@0+ (1,0) [0|1] "" XXX
BO_ 694 CID_XONEFU: 8 XXX
SG_ sig_mvapty : 7|8@0+ (1,0) [0|255] "" XXX
SG_ sig_jpruwr : 15|8@0+ (1,0) [0|255] "" XXX
SG_ sig_fcaamu : 23|8@0+ (1,0) [0|255] "" XXX
SG_ sig_xlnywj : 31|8@0+ (1,0) [0|255] "" XXX
SG_ sig_kdgexm : 39|8@0+ (1,0) [0|255] "" XXX
SG_ sig_zrgsyx : 47|8@0+ (1,0) [0|255] "" XXX
BO_ 694 CID_JZLVIG: 8 XXX
SG_ sig_duajdk : 7|8@0+ (1,0) [0|255] "" XXX
SG_ sig_dxbzyy : 15|8@0+ (1,0) [0|255] "" XXX
SG_ sig_gdqfoi : 23|8@0+ (1,0) [0|255] "" XXX
SG_ sig_upzfgv : 31|8@0+ (1,0) [0|255] "" XXX
SG_ sig_ujjzic : 39|8@0+ (1,0) [0|255] "" XXX
SG_ sig_fmrxtb : 47|8@0+ (1,0) [0|255] "" XXX
BO_ 790 CID_ODVYNM: 8 XXX
SG_ sig_oenyeq : 3|4@0+ (1,0) [0|1] "" XXX
SG_ sig_egorcj : 4|2@1+ (1,0) [0|3] "" XXX
SG_ sig_azytel : 6|2@1+ (1,0) [0|3] "" XXX
SG_ sig_govyqn : 8|2@1+ (1,0) [0|3] "" XXX
SG_ sig_aoweea : 10|1@1+ (1,0) [0|1] "" XXX
SG_ sig_pjehxm : 11|4@1+ (1,0) [0|1] "" XXX
SG_ sig_adqpbg : 15|1@0+ (1,0) [0|1] "" XXX
SG_ sig_vohxni : 16|11@1- (1,0) [-1024|1023] "" XXX
SG_ sig_amipgq : 27|1@1+ (1,0) [0|1] "" XXX
SG_ sig_ypbjmb : 28|1@1+ (1,0) [0|3] "" XXX
SG_ sig_shppjs : 29|1@0+ (1,0) [0|1] "" XXX
SG_ sig_vrdqxx : 30|1@0+ (1,0) [0|1] "" XXX
SG_ sig_enyhej : 31|1@0+ (1,0) [0|1] "" XXX
SG_ sig_hcdtrj : 32|2@1+ (1,0) [0|3] "" XXX
SG_ sig_ulkase : 34|2@1+ (1,0) [0|3] "" XXX
SG_ sig_gkwfuv : 36|4@1+ (1,0) [0|3] "" XXX
SG_ sig_wxvlol : 40|8@1+ (5,-5) [-5|1270] "" XXX
SG_ sig_uvbebk : 49|2@0+ (1,0) [0|3] "" XXX
SG_ sig_slpxgr : 51|2@0+ (1,0) [0|3] "" XXX
SG_ sig_yxuxyx : 52|4@1+ (1,0) [0|15] "" XXX
SG_ sig_uxvepe : 56|8@1+ (1,0) [0|15] "" XXX
BO_ 790 CID_YTXNJK: 8 XXX
SG_ sig_tnjscz : 3|4@0+ (1,0) [0|1] "" XXX
SG_ sig_lxznzj : 4|2@1+ (1,0) [0|3] "" XXX
SG_ sig_llwaiy : 6|2@1+ (1,0) [0|3] "" XXX
SG_ sig_ecmvna : 8|2@1+ (1,0) [0|3] "" XXX
SG_ sig_kptghz : 10|1@1+ (1,0) [0|1] "" XXX
SG_ sig_rekbkt : 11|4@1+ (1,0) [0|1] "" XXX
SG_ sig_jgfoot : 15|1@0+ (1,0) [0|1] "" XXX
SG_ sig_otmfzz : 16|11@1- (1,0) [-1024|1023] "" XXX
SG_ sig_bhhzpn : 27|1@1+ (1,0) [0|1] "" XXX
SG_ sig_qscaec : 28|1@1+ (1,0) [0|3] "" XXX
SG_ sig_osnmjf : 29|1@0+ (1,0) [0|1] "" XXX
SG_ sig_zrghyr : 30|1@0+ (1,0) [0|1] "" XXX
SG_ sig_pmeplf : 31|1@0+ (1,0) [0|1] "" XXX
SG_ sig_dwcsiy : 32|2@1+ (1,0) [0|3] "" XXX
SG_ sig_kmicyx : 34|2@1+ (1,0) [0|3] "" XXX
SG_ sig_ncfref : 36|4@1+ (1,0) [0|3] "" XXX
SG_ sig_jplbpv : 40|8@1+ (5,-5) [-5|1270] "" XXX
SG_ sig_trlsig : 49|2@0+ (1,0) [0|3] "" XXX
SG_ sig_vuchiv : 51|2@0+ (1,0) [0|3] "" XXX
SG_ sig_tnlzfc : 52|4@1+ (1,0) [0|15] "" XXX
SG_ sig_ldptaz : 56|8@1+ (1,0) [0|15] "" XXX
BO_ 792 CID_AMVXFB: 8 XXX
SG_ sig_txwxva : 0|2@1+ (1,0) [0|1] "" XXX
SG_ sig_ngzakq : 2|1@1+ (1,0) [0|1] "" XXX
SG_ sig_oefuvt : 3|1@1+ (1,0) [0|1] "" XXX
SG_ sig_recvvp : 4|1@1+ (1,0) [0|1] "" XXX
SG_ sig_cdivaf : 5|3@1+ (1,0) [0|1] "" XXX
SG_ sig_lmqnos : 8|12@1- (1,0) [-2048|2047] "" XXX
SG_ sig_qkmdht : 20|1@1+ (1,0) [0|1] "" XXX
SG_ sig_keozgi : 21|1@1+ (1,0) [0|1] "" XXX
SG_ sig_ccphfi : 22|2@1+ (1,0) [0|15] "" XXX
SG_ sig_chyhsk : 24|12@1- (1,0) [-2048|2047] "" XXX
SG_ sig_lvhmbx : 36|4@1+ (1,0) [0|15] "" XXX
SG_ sig_kepfje : 40|12@1+ (1,0) [0|4095] "" XXX
SG_ sig_yxuxyx : 52|4@1+ (1,0) [0|15] "" XXX
SG_ sig_uxvepe : 56|8@1+ (1,0) [0|255] "" XXX
BO_ 792 CID_BXBZJK: 8 XXX
SG_ sig_xhyzub : 0|2@1+ (1,0) [0|1] "" XXX
SG_ sig_mxlfeh : 2|1@1+ (1,0) [0|1] "" XXX
SG_ sig_upyhyg : 3|1@1+ (1,0) [0|1] "" XXX
SG_ sig_iglnwy : 4|1@1+ (1,0) [0|1] "" XXX
SG_ sig_vrofhc : 5|3@1+ (1,0) [0|1] "" XXX
SG_ sig_twrzbs : 8|12@1- (1,0) [-2048|2047] "" XXX
SG_ sig_kajoro : 20|1@1+ (1,0) [0|1] "" XXX
SG_ sig_nzdewb : 21|1@1+ (1,0) [0|1] "" XXX
SG_ sig_okfogm : 22|2@1+ (1,0) [0|15] "" XXX
SG_ sig_fbdkbh : 24|12@1- (1,0) [-2048|2047] "" XXX
SG_ sig_drouoj : 36|4@1+ (1,0) [0|15] "" XXX
SG_ sig_cucipg : 40|12@1+ (1,0) [0|4095] "" XXX
SG_ sig_tnlzfc : 52|4@1+ (1,0) [0|15] "" XXX
SG_ sig_ldptaz : 56|8@1+ (1,0) [0|255] "" XXX
BO_ 813 CID_EGEFDT: 8 XXX
SG_ sig_siyrfd : 0|9@1+ (0.5,0) [0|255.5] "" XXX
SG_ sig_wnjxeg : 9|1@1+ (1,0) [0|1] "" XXX
SG_ sig_yizxjn : 10|3@1+ (1,0) [0|7] "" XXX
SG_ sig_vzskcm : 13|3@1+ (1,0) [0|7] "" XXX
SG_ sig_qilvpm : 16|1@1+ (1,0) [0|1] "" XXX
SG_ sig_vcvikl : 17|1@1+ (1,0) [0|1] "" XXX
SG_ sig_oefuvt : 18|1@1+ (1,0) [0|1] "" XXX
SG_ sig_jzgcwf : 19|3@1+ (1,0) [0|1] "" XXX
SG_ sig_xkrulk : 22|1@0+ (1,0) [0|1] "" XXX
SG_ sig_uivjig : 23|1@0+ (1,0) [0|1] "" XXX
SG_ sig_govyqn : 24|1@1+ (1,0) [0|1] "" XXX
SG_ sig_gwkzyz : 25|7@1+ (1,0) [0|127] "" XXX
SG_ sig_vrmqhi : 32|4@1+ (1,0) [0|15] "" XXX
SG_ sig_qifnmb : 36|8@1+ (1,0) [0|15] "" XXX
SG_ sig_hcsbiq : 47|4@0+ (1,0) [0|7] "" XXX
SG_ sig_yxuxyx : 48|4@1+ (1,0) [0|15] "" XXX
SG_ sig_afhsaa : 55|4@0+ (1,0) [0|15] "" XXX
SG_ sig_uxvepe : 56|8@1+ (1,0) [0|255] "" XXX
BO_ 813 CID_HRRNWQ: 8 XXX
SG_ sig_ybeooi : 0|9@1+ (0.5,0) [0|255.5] "" XXX
SG_ sig_akzlgc : 9|1@1+ (1,0) [0|1] "" XXX
SG_ sig_svnees : 10|3@1+ (1,0) [0|7] "" XXX
SG_ sig_xehggg : 13|3@1+ (1,0) [0|7] "" XXX
SG_ sig_dxgcxv : 16|1@1+ (1,0) [0|1] "" XXX
SG_ sig_ooepta : 17|1@1+ (1,0) [0|1] "" XXX
SG_ sig_upyhyg : 18|1@1+ (1,0) [0|1] "" XXX
SG_ sig_wuliqd : 19|3@1+ (1,0) [0|1] "" XXX
SG_ sig_gzvqdg : 22|1@0+ (1,0) [0|1] "" XXX
SG_ sig_nxwtdc : 23|1@0+ (1,0) [0|1] "" XXX
SG_ sig_ecmvna : 24|1@1+ (1,0) [0|1] "" XXX
SG_ sig_ncglzf : 25|7@1+ (1,0) [0|127] "" XXX
SG_ sig_sgvrjt : 32|4@1+ (1,0) [0|15] "" XXX
SG_ sig_cdtyrw : 36|8@1+ (1,0) [0|15] "" XXX
SG_ sig_cwtqxq : 47|4@0+ (1,0) [0|7] "" XXX
SG_ sig_tnlzfc : 48|4@1+ (1,0) [0|15] "" XXX
SG_ sig_cyjugi : 55|4@0+ (1,0) [0|15] "" XXX
SG_ sig_ldptaz : 56|8@1+ (1,0) [0|255] "" XXX
BO_ 814 CID_CJOTOK: 8 XXX
SG_ sig_bzpyqa : 0|8@1+ (0.05,-5) [-100|155] "" XXX
SG_ sig_cddxvv : 8|8@1+ (0.05,-5) [0|1.26] "" XXX
SG_ sig_mkguub : 16|8@1+ (0.05,-5) [0|1.26] "" XXX
SG_ sig_twqljy : 24|7@1+ (0.2,0) [0|12.7] "" XXX
SG_ sig_oefuvt : 31|1@0+ (1,0) [0|1] "" XXX
SG_ sig_unfjmj : 32|7@1+ (0.2,-16) [0|12.7] "" XXX
SG_ sig_jryohm : 39|1@0+ (1,0) [0|1] "" XXX
SG_ sig_xcuzun : 40|1@0+ (1,0) [0|1] "" XXX
SG_ sig_uordax : 41|1@0+ (1,0) [0|1] "" XXX
SG_ sig_wgfaul : 42|1@1+ (1,0) [0|3] "" XXX
SG_ sig_majuxb : 45|3@0+ (1,0) [0|1] "" XXX
SG_ sig_ozrhhw : 46|2@1+ (1,0) [0|3] "" XXX
SG_ sig_yxuxyx : 48|4@1+ (1,0) [0|15] "" XXX
SG_ sig_snpgzf : 55|4@0+ (1,0) [0|15] "" XXX
SG_ sig_uxvepe : 56|8@1+ (1,0) [0|255] "" XXX
BO_ 814 CID_RGGFFV: 8 XXX
SG_ sig_pxlwru : 0|8@1+ (0.05,-5) [-100|155] "" XXX
SG_ sig_sldhtp : 8|8@1+ (0.05,-5) [0|1.26] "" XXX
SG_ sig_isouwt : 16|8@1+ (0.05,-5) [0|1.26] "" XXX
SG_ sig_fevtnt : 24|7@1+ (0.2,0) [0|12.7] "" XXX
SG_ sig_upyhyg : 31|1@0+ (1,0) [0|1] "" XXX
SG_ sig_vxefrr : 32|7@1+ (0.2,-16) [0|12.7] "" XXX
SG_ sig_lpjoyp : 39|1@0+ (1,0) [0|1] "" XXX
SG_ sig_dtejff : 40|1@0+ (1,0) [0|1] "" XXX
SG_ sig_yvqhug : 41|1@0+ (1,0) [0|1] "" XXX
SG_ sig_cpghrx : 42|1@1+ (1,0) [0|3] "" XXX
SG_ sig_fyhkic : 45|3@0+ (1,0) [0|1] "" XXX
SG_ sig_ukcupc : 46|2@1+ (1,0) [0|3] "" XXX
SG_ sig_tnlzfc : 48|4@1+ (1,0) [0|15] "" XXX
SG_ sig_vmphcu : 55|4@0+ (1,0) [0|15] "" XXX
SG_ sig_ldptaz : 56|8@1+ (1,0) [0|255] "" XXX
BO_ 815 CID_XBRXRK: 8 XXX
SG_ sig_yxuxyx : 48|4@1+ (1,0) [0|15] "" XXX
SG_ sig_bijdio : 55|4@0+ (1,0) [0|15] "" XXX
SG_ sig_uxvepe : 56|8@1+ (1,0) [0|255] "" XXX
BO_ 815 CID_OVYOSQ: 8 XXX
SG_ sig_tnlzfc : 48|4@1+ (1,0) [0|15] "" XXX
SG_ sig_tvikik : 55|4@0+ (1,0) [0|15] "" XXX
SG_ sig_ldptaz : 56|8@1+ (1,0) [0|255] "" XXX
BO_ 834 CID_PQUVAH: 8 XXX
SG_ sig_vmzfns : 0|8@1+ (0.01,0) [0|2.55] "" XXX
SG_ sig_bfimgs : 8|8@1+ (0.01,0) [0|2.55] "" XXX
SG_ sig_xeyjpf : 19|1@1+ (1,0) [0|1] "" XXX
SG_ sig_rhsefc : 20|2@1+ (1,0) [0|255] "" XXX
SG_ sig_lmezps : 28|2@1+ (1,0) [0|1] "" XXX
SG_ sig_uxvepe : 56|8@1+ (1,0) [0|255] "" XXX
BO_ 834 CID_VVYKXZ: 8 XXX
SG_ sig_ezjqyg : 0|8@1+ (0.01,0) [0|2.55] "" XXX
SG_ sig_zrkbsy : 8|8@1+ (0.01,0) [0|2.55] "" XXX
SG_ sig_drvwlh : 19|1@1+ (1,0) [0|1] "" XXX
SG_ sig_danjiu : 20|2@1+ (1,0) [0|255] "" XXX
SG_ sig_twmgpp : 28|2@1+ (1,0) [0|1] "" XXX
SG_ sig_ldptaz : 56|8@1+ (1,0) [0|255] "" XXX
BO_ 884 CID_HWRERK: 8 MRR
SG_ sig_grbkwp : 2|3@0+ (1,0) [0|3] "" MRR
SG_ sig_idzvqy : 7|4@0+ (1,0) [0|15] "" MRR
SG_ sig_jlwomt : 15|8@0+ (0.1,-12) [0|255] "" MRR
SG_ sig_xadfer : 23|8@0+ (1,-100) [0|255] "" MRR
SG_ sig_hepzsj : 40|1@0+ (1,0) [0|3] "" MRR
SG_ sig_agockz : 43|1@0+ (1,0) [0|1] "" XXX
SG_ sig_gjmjja : 44|4@1+ (1,0) [0|15] "" XXX
SG_ sig_yxuxyx : 52|4@1+ (1,0) [0|15] "" MRR
SG_ sig_uxvepe : 56|8@1+ (1,0) [0|255] "" MRR
BO_ 884 CID_PKGWBI: 8 MRR
SG_ sig_azkkjc : 2|3@0+ (1,0) [0|3] "" MRR
SG_ sig_ivooji : 7|4@0+ (1,0) [0|15] "" MRR
SG_ sig_dciaiw : 15|8@0+ (0.1,-12) [0|255] "" MRR
SG_ sig_yauvoo : 23|8@0+ (1,-100) [0|255] "" MRR
SG_ sig_hgpmxk : 40|1@0+ (1,0) [0|3] "" MRR
SG_ sig_dfzfll : 43|1@0+ (1,0) [0|1] "" XXX
SG_ sig_lycftj : 44|4@1+ (1,0) [0|15] "" XXX
SG_ sig_tnlzfc : 52|4@1+ (1,0) [0|15] "" MRR
SG_ sig_ldptaz : 56|8@1+ (1,0) [0|255] "" MRR
BO_ 944 CID_DDUFJY: 8 XXX
SG_ sig_uhundp : 1|2@0+ (1,0) [0|3] "" XXX
SG_ sig_dqsucp : 2|1@0+ (1,0) [0|1] "" XXX
SG_ sig_vpbrkn : 4|2@0+ (1,0) [0|3] "" XXX
SG_ sig_dbsxtz : 5|1@0+ (1,0) [0|1] "" XXX
SG_ sig_rnxrix : 6|1@0+ (1,0) [0|1] "" XXX
SG_ sig_fsnakf : 7|1@0+ (1,0) [0|1] "" XXX
SG_ sig_nzaohu : 8|1@0+ (1,0) [0|1] "" XXX
SG_ sig_kjciks : 11|3@0+ (1,0) [0|7] "" XXX
SG_ sig_hvetoe : 12|1@0+ (1,0) [0|1] "" XXX
SG_ sig_fuzjdf : 14|2@0+ (1,0) [0|3] "" XXX
SG_ sig_rkhuca : 15|1@0+ (1,0) [0|1] "" XXX
SG_ sig_ymoswq : 16|1@0+ (1,0) [0|1] "" XXX
SG_ sig_htnoxs : 18|2@0+ (1,0) [0|3] "" XXX
SG_ sig_dsajpu : 19|1@0+ (1,0) [0|1] "" XXX
SG_ sig_biecnf : 23|4@0+ (1,0) [0|15] "" XXX
SG_ sig_agvhzk : 24|28@1+ (1,0) [0|268435455] "" XXX
SG_ sig_yxuxyx : 52|4@1+ (1,0) [0|15] "" XXX
SG_ sig_uxvepe : 56|8@1+ (1,0) [0|255] "" XXX
BO_ 944 CID_FFSUDY: 8 XXX
SG_ sig_ukktsi : 1|2@0+ (1,0) [0|3] "" XXX
SG_ sig_tqjpfq : 2|1@0+ (1,0) [0|1] "" XXX
SG_ sig_ylibga : 4|2@0+ (1,0) [0|3] "" XXX
SG_ sig_tivbek : 5|1@0+ (1,0) [0|1] "" XXX
SG_ sig_tycmbw : 6|1@0+ (1,0) [0|1] "" XXX
SG_ sig_qumjqj : 7|1@0+ (1,0) [0|1] "" XXX
SG_ sig_lhbrrw : 8|1@0+ (1,0) [0|1] "" XXX
SG_ sig_emgytj : 11|3@0+ (1,0) [0|7] "" XXX
SG_ sig_gfwtlh : 12|1@0+ (1,0) [0|1] "" XXX
SG_ sig_cduvnv : 14|2@0+ (1,0) [0|3] "" XXX
SG_ sig_ashots : 15|1@0+ (1,0) [0|1] "" XXX
SG_ sig_srsczo : 16|1@0+ (1,0) [0|1] "" XXX
SG_ sig_dlqazz : 18|2@0+ (1,0) [0|3] "" XXX
SG_ sig_ldcmbh : 19|1@0+ (1,0) [0|1] "" XXX
SG_ sig_mcwnwk : 23|4@0+ (1,0) [0|15] "" XXX
SG_ sig_lgmwwb : 24|28@1+ (1,0) [0|268435455] "" XXX
SG_ sig_tnlzfc : 52|4@1+ (1,0) [0|15] "" XXX
SG_ sig_ldptaz : 56|8@1+ (1,0) [0|255] "" XXX
BO_ 1048 CID_BAEDUI: 8 XXX
SG_ sig_aylkfk : 9|2@0+ (1,0) [0|1] "" XXX
SG_ sig_hyaper : 11|2@0+ (1,0) [0|1] "" XXX
SG_ sig_hdfiwd : 17|1@0+ (1,0) [0|1] "" XXX
BO_ 1048 CID_PMCVHK: 8 XXX
SG_ sig_uiiaix : 9|2@0+ (1,0) [0|1] "" XXX
SG_ sig_cbtcot : 11|2@0+ (1,0) [0|1] "" XXX
SG_ sig_qhehmo : 17|1@0+ (1,0) [0|1] "" XXX
VAL_ 578 sig_rnetec 4 "D" 2 "R" 3 "N" 1 "P";
VAL_ 578 sig_cpwfga 4 "D" 2 "R" 3 "N" 1 "P";

View File

@@ -1,2 +1,2 @@
# Pyarmor 9.2.3 (trial), 000000, 2026-02-01T16:07:29.885562
# Pyarmor 9.2.3 (trial), 000000, 2026-02-01T16:59:15.364875
from .pyarmor_runtime import __pyarmor__

View File

@@ -147,7 +147,7 @@ EmptyAlert = Alert("" , "", AlertStatus.normal, AlertSize.none, Priority.LOWEST,
class NoEntryAlert(Alert):
def __init__(self, alert_text_2: str,
alert_text_1: str = "openpilot不可用",
alert_text_1: str = "openpilot Unavailable",
visual_alert: car.CarControl.HUDControl.VisualAlert=VisualAlert.none):
super().__init__(alert_text_1, alert_text_2, AlertStatus.normal,
AlertSize.mid, Priority.LOW, visual_alert,
@@ -156,7 +156,7 @@ class NoEntryAlert(Alert):
class SoftDisableAlert(Alert):
def __init__(self, alert_text_2: str):
super().__init__("请立即接管", alert_text_2,
super().__init__("TAKE CONTROL IMMEDIATELY", alert_text_2,
AlertStatus.userPrompt, AlertSize.full,
Priority.MID, VisualAlert.steerRequired,
AudibleAlert.warningSoft, 2.),
@@ -166,12 +166,12 @@ class SoftDisableAlert(Alert):
class UserSoftDisableAlert(SoftDisableAlert):
def __init__(self, alert_text_2: str):
super().__init__(alert_text_2),
self.alert_text_1 = "openpilot即将解除"
self.alert_text_1 = "openpilot will disengage"
class ImmediateDisableAlert(Alert):
def __init__(self, alert_text_2: str):
super().__init__("请立即接管", alert_text_2,
super().__init__("TAKE CONTROL IMMEDIATELY", alert_text_2,
AlertStatus.critical, AlertSize.full,
Priority.HIGHEST, VisualAlert.steerRequired,
AudibleAlert.warningImmediate, 4.),
@@ -193,7 +193,7 @@ class NormalPermanentAlert(Alert):
class StartupAlert(Alert):
def __init__(self, alert_text_1: str, alert_text_2: str = "小鸽温馨提醒:请始终握住方向盘并注视前方道路", alert_status=AlertStatus.normal):
def __init__(self, alert_text_1: str, alert_text_2: str = "Always keep hands on wheel and eyes on road", alert_status=AlertStatus.normal):
super().__init__(alert_text_1, alert_text_2,
alert_status, AlertSize.mid,
Priority.LOWER, VisualAlert.none, AudibleAlert.none, 5.),
@@ -230,25 +230,25 @@ def startup_master_alert(CP: car.CarParams, CS: car.CarState, sm: messaging.SubM
if "REPLAY" in os.environ:
branch = "replay"
return StartupAlert("提醒需配合CarrotAmap或CP搭子 App才能实现高德地图的NOO", branch, alert_status=AlertStatus.userPrompt)
return StartupAlert("WARNING: This branch is not tested", branch, alert_status=AlertStatus.userPrompt)
def below_engage_speed_alert(CP: car.CarParams, CS: car.CarState, sm: messaging.SubMaster, metric: bool, soft_disable_time: int, personality) -> Alert:
return NoEntryAlert(f"车速超过{get_display_speed(CP.minEnableSpeed, metric)}后可启用")
return NoEntryAlert(f"Drive above {get_display_speed(CP.minEnableSpeed, metric)} to engage")
def below_steer_speed_alert(CP: car.CarParams, CS: car.CarState, sm: messaging.SubMaster, metric: bool, soft_disable_time: int, personality) -> Alert:
return Alert(
f"当前车速低于{get_display_speed(CP.minSteerSpeed, metric)}时无法提供转向",
f"Steer Unavailable Below {get_display_speed(CP.minSteerSpeed, metric)}",
"",
AlertStatus.userPrompt, AlertSize.small,
Priority.LOW, VisualAlert.steerRequired, AudibleAlert.none, 0.4)
def calibration_incomplete_alert(CP: car.CarParams, CS: car.CarState, sm: messaging.SubMaster, metric: bool, soft_disable_time: int, personality) -> Alert:
first_word = '重新校准' if sm['liveCalibration'].calStatus == log.LiveCalibrationData.Status.recalibrating else '校准'
first_word = 'Recalibration' if sm['liveCalibration'].calStatus == log.LiveCalibrationData.Status.recalibrating else 'Calibration'
return Alert(
f"{first_word}进行中:{sm['liveCalibration'].calPerc:.0f}%",
f"请将车速提升至{get_display_speed(MIN_SPEED_FILTER, metric)}以上",
f"{first_word} in Progress: {sm['liveCalibration'].calPerc:.0f}%",
f"Drive Above {get_display_speed(MIN_SPEED_FILTER, metric)}",
AlertStatus.normal, AlertSize.mid,
Priority.LOWEST, VisualAlert.none, AudibleAlert.none, .2)
@@ -256,13 +256,13 @@ def torque_nn_load_alert(CP: car.CarParams, CS: car.CarState, sm: messaging.SubM
model_name = Params().get("NNFFModelName", encoding='utf-8')
if model_name == "":
return Alert(
"NNFF扭矩控制器不可用",
"请向Twilsonco提供日志以便添加",
"NNFF Torque Controller not available",
"Donate logs to Twilsonco to get it added!",
AlertStatus.userPrompt, AlertSize.mid,
Priority.LOW, VisualAlert.none, AudibleAlert.prompt, 6.0)
else:
return Alert(
"NNFF扭矩控制器已加载",
"NNFF Torque Controller loaded",
model_name,
AlertStatus.userPrompt, AlertSize.mid,
Priority.LOW, VisualAlert.none, AudibleAlert.prompt, 5.0)
@@ -271,57 +271,57 @@ def torque_nn_load_alert(CP: car.CarParams, CS: car.CarState, sm: messaging.SubM
def out_of_space_alert(CP: car.CarParams, CS: car.CarState, sm: messaging.SubMaster, metric: bool, soft_disable_time: int, personality) -> Alert:
full_perc = round(100. - sm['deviceState'].freeSpacePercent)
return NormalPermanentAlert("存储空间不足", f"已使用{full_perc}%")
return NormalPermanentAlert("Out of Storage", f"{full_perc}% full")
def posenet_invalid_alert(CP: car.CarParams, CS: car.CarState, sm: messaging.SubMaster, metric: bool, soft_disable_time: int, personality) -> Alert:
mdl = sm['modelV2'].velocity.x[0] if len(sm['modelV2'].velocity.x) else math.nan
err = CS.vEgo - mdl
msg = f"速度误差:{err:.1f} m/s"
return NoEntryAlert(msg, alert_text_1="Posenet速度无效")
msg = f"Speed Error: {err:.1f} m/s"
return NoEntryAlert(msg, alert_text_1="Posenet Speed Invalid")
def process_not_running_alert(CP: car.CarParams, CS: car.CarState, sm: messaging.SubMaster, metric: bool, soft_disable_time: int, personality) -> Alert:
not_running = [p.name for p in sm['managerState'].processes if not p.running and p.shouldBeRunning]
msg = ', '.join(not_running)
return NoEntryAlert(msg, alert_text_1="进程未运行")
return NoEntryAlert(msg, alert_text_1="Process Not Running")
def comm_issue_alert(CP: car.CarParams, CS: car.CarState, sm: messaging.SubMaster, metric: bool, soft_disable_time: int, personality) -> Alert:
bs = [s for s in sm.data.keys() if not sm.all_checks([s, ])]
msg = ', '.join(bs[:4]) # can't fit too many on one line
return NoEntryAlert(msg, alert_text_1="进程间通信异常")
return NoEntryAlert(msg, alert_text_1="Communication Issue Between Processes")
def camera_malfunction_alert(CP: car.CarParams, CS: car.CarState, sm: messaging.SubMaster, metric: bool, soft_disable_time: int, personality) -> Alert:
all_cams = ('roadCameraState', 'driverCameraState', 'wideRoadCameraState')
all_cams = ('roadCameraState', 'wideRoadCameraState')
bad_cams = [s.replace('State', '') for s in all_cams if s in sm.data.keys() and not sm.all_checks([s, ])]
return NormalPermanentAlert("摄像头故障", ', '.join(bad_cams))
return NormalPermanentAlert("Camera Malfunction", ', '.join(bad_cams))
def calibration_invalid_alert(CP: car.CarParams, CS: car.CarState, sm: messaging.SubMaster, metric: bool, soft_disable_time: int, personality) -> Alert:
rpy = sm['liveCalibration'].rpyCalib
yaw = math.degrees(rpy[2] if len(rpy) == 3 else math.nan)
pitch = math.degrees(rpy[1] if len(rpy) == 3 else math.nan)
angles = f"请重新安装设备(俯仰:{pitch:.1f}°,偏航:{yaw:.1f}°"
return NormalPermanentAlert("校准无效", angles)
angles = f"Remount Device (Pitch: {pitch:.1f}°, Yaw: {yaw:.1f}°)"
return NormalPermanentAlert("Calibration Invalid", angles)
def paramsd_invalid_alert(CP: car.CarParams, CS: car.CarState, sm: messaging.SubMaster, metric: bool, soft_disable_time: int, personality) -> Alert:
if not sm['liveParameters'].angleOffsetValid:
angle_offset_deg = sm['liveParameters'].angleOffsetDeg
title = "检测到转向未对准"
text = f"角度偏移过大(偏移:{angle_offset_deg:.1f}°"
title = "Steering misalignment detected"
text = f"Angle offset too high (Offset: {angle_offset_deg:.1f}°)"
elif not sm['liveParameters'].steerRatioValid:
steer_ratio = sm['liveParameters'].steerRatio
title = "转向比不匹配"
text = f"转向齿条几何可能异常(比例:{steer_ratio:.1f}"
title = "Steer ratio mismatch"
text = f"Steering rack geometry may be off (Ratio: {steer_ratio:.1f})"
elif not sm['liveParameters'].stiffnessFactorValid:
stiffness_factor = sm['liveParameters'].stiffnessFactor
title = "轮胎刚度异常"
text = f"请检查轮胎、胎压或定位(系数:{stiffness_factor:.1f}"
title = "Abnormal tire stiffness"
text = f"Check tires, pressure, or alignment (Factor: {stiffness_factor:.1f})"
else:
return NoEntryAlert("paramsd临时错误")
return NoEntryAlert("paramsd Temporary Error")
return NoEntryAlert(alert_text_1=title, alert_text_2=text)
@@ -329,34 +329,34 @@ def overheat_alert(CP: car.CarParams, CS: car.CarState, sm: messaging.SubMaster,
cpu = max(sm['deviceState'].cpuTempC, default=0.)
gpu = max(sm['deviceState'].gpuTempC, default=0.)
temp = max((cpu, gpu, sm['deviceState'].memoryTempC))
return NormalPermanentAlert("系统过热", f"温度 {temp:.0f} °C")
return NormalPermanentAlert("System Overheated", f"{temp:.0f} °C")
def low_memory_alert(CP: car.CarParams, CS: car.CarState, sm: messaging.SubMaster, metric: bool, soft_disable_time: int, personality) -> Alert:
return NormalPermanentAlert("内存不足", f"已用{sm['deviceState'].memoryUsagePercent}%")
return NormalPermanentAlert("Low Memory", f"{sm['deviceState'].memoryUsagePercent}% used")
def high_cpu_usage_alert(CP: car.CarParams, CS: car.CarState, sm: messaging.SubMaster, metric: bool, soft_disable_time: int, personality) -> Alert:
x = max(sm['deviceState'].cpuUsagePercent, default=0.)
return NormalPermanentAlert("CPU占用过高", f"已用{x}%")
return NormalPermanentAlert("High CPU Usage", f"{x}% used")
def modeld_lagging_alert(CP: car.CarParams, CS: car.CarState, sm: messaging.SubMaster, metric: bool, soft_disable_time: int, personality) -> Alert:
return NormalPermanentAlert("驾驶模型延迟", f"丢帧率{sm['modelV2'].frameDropPerc:.1f}%")
return NormalPermanentAlert("Driving Model Lagging", f"{sm['modelV2'].frameDropPerc:.1f}% frames dropped")
def wrong_car_mode_alert(CP: car.CarParams, CS: car.CarState, sm: messaging.SubMaster, metric: bool, soft_disable_time: int, personality) -> Alert:
text = "请启用自适应巡航以接入"
text = "Enable Adaptive Cruise to Engage"
if CP.brand == "honda":
text = "请打开主开关以接入"
text = "Enable Main Switch to Engage"
return NoEntryAlert(text)
def joystick_alert(CP: car.CarParams, CS: car.CarState, sm: messaging.SubMaster, metric: bool, soft_disable_time: int, personality) -> Alert:
gb = sm['carControl'].actuators.accel / 4.
steer = sm['carControl'].actuators.torque
vals = f"油门:{round(gb * 100.)}%,转向:{round(steer * 100.)}%"
return NormalPermanentAlert("手柄模式", vals)
vals = f"Gas: {round(gb * 100.)}%, Steer: {round(steer * 100.)}%"
return NormalPermanentAlert("Joystick Mode", vals)
def longitudinal_maneuver_alert(CP: car.CarParams, CS: car.CarState, sm: messaging.SubMaster, metric: bool, soft_disable_time: int, personality) -> Alert:
@@ -371,14 +371,14 @@ def longitudinal_maneuver_alert(CP: car.CarParams, CS: car.CarState, sm: messagi
def personality_changed_alert(CP: car.CarParams, CS: car.CarState, sm: messaging.SubMaster, metric: bool, soft_disable_time: int, personality) -> Alert:
personality = str(personality).title()
return NormalPermanentAlert(f"驾驶风格:{personality}", duration=1.5)
return NormalPermanentAlert(f"Driving Personality: {personality}", duration=1.5)
def car_parser_result(CP: car.CarParams, CS: car.CarState, sm: messaging.SubMaster, metric: bool, soft_disable_time: int, personality) -> Alert:
results = Params().get("CanParserResult")
if results is None:
results = ""
return Alert(
"CAN错误:请检查连接!!",
"CAN Error: Check Connections!!",
results,
AlertStatus.normal, AlertSize.small,
Priority.LOW, VisualAlert.none, AudibleAlert.none, 1., creation_delay=1.)
@@ -394,21 +394,21 @@ EVENTS: dict[int, dict[str, Alert | AlertCallbackType]] = {
EventName.joystickDebug: {
ET.WARNING: joystick_alert,
ET.PERMANENT: NormalPermanentAlert("手柄模式"),
ET.PERMANENT: NormalPermanentAlert("Joystick Mode"),
},
EventName.longitudinalManeuver: {
ET.WARNING: longitudinal_maneuver_alert,
ET.PERMANENT: NormalPermanentAlert("纵向操作模式",
"请确保前方道路无障碍"),
ET.PERMANENT: NormalPermanentAlert("Longitudinal Maneuver Mode",
"Ensure road ahead is clear"),
},
EventName.selfdriveInitializing: {
ET.NO_ENTRY: NoEntryAlert("系统初始化中"),
ET.NO_ENTRY: NoEntryAlert("System Initializing"),
},
EventName.startup: {
ET.PERMANENT: StartupAlert("随时准备接管")
ET.PERMANENT: StartupAlert("Be ready to take over at any time")
},
EventName.startupMaster: {
@@ -416,29 +416,29 @@ EVENTS: dict[int, dict[str, Alert | AlertCallbackType]] = {
},
EventName.startupNoControl: {
ET.PERMANENT: StartupAlert("行车记录仪模式"),
ET.NO_ENTRY: NoEntryAlert("行车记录仪模式"),
ET.PERMANENT: StartupAlert("Dashcam mode"),
ET.NO_ENTRY: NoEntryAlert("Dashcam mode"),
},
EventName.startupNoCar: {
ET.PERMANENT: StartupAlert("不支持车型,仅提供行车记录仪模式"),
ET.PERMANENT: StartupAlert("Dashcam mode for unsupported car"),
},
EventName.startupNoSecOcKey: {
ET.PERMANENT: NormalPermanentAlert("行车记录仪模式",
"安全密钥不可用",
ET.PERMANENT: NormalPermanentAlert("Dashcam Mode",
"Security Key Not Available",
priority=Priority.HIGH),
},
EventName.dashcamMode: {
ET.PERMANENT: NormalPermanentAlert("行车记录仪模式",
ET.PERMANENT: NormalPermanentAlert("Dashcam Mode",
priority=Priority.LOWEST),
},
EventName.invalidLkasSetting: {
ET.PERMANENT: NormalPermanentAlert("LKAS设置无效",
"请切换原厂LKAS开关后再接入"),
ET.NO_ENTRY: NoEntryAlert("LKAS设置无效"),
ET.PERMANENT: NormalPermanentAlert("Invalid LKAS setting",
"Toggle stock LKAS on or off to engage"),
ET.NO_ENTRY: NoEntryAlert("Invalid LKAS setting"),
},
EventName.cruiseMismatch: {
@@ -449,40 +449,40 @@ EVENTS: dict[int, dict[str, Alert | AlertCallbackType]] = {
# read-only mode. This can be solved by adding your fingerprint.
# See https://github.com/commaai/openpilot/wiki/Fingerprinting for more information
EventName.carUnrecognized: {
ET.PERMANENT: NormalPermanentAlert("行车记录仪模式",
"车辆未识别",
ET.PERMANENT: NormalPermanentAlert("Dashcam Mode",
"Car Unrecognized",
priority=Priority.LOWEST),
},
EventName.aeb: {
ET.PERMANENT: Alert(
"刹车!",
"紧急制动:存在碰撞风险",
"BRAKE!",
"Emergency Braking: Risk of Collision",
AlertStatus.critical, AlertSize.full,
Priority.HIGHEST, VisualAlert.fcw, AudibleAlert.stopStop, 2.),
ET.NO_ENTRY: NoEntryAlert("AEB:存在碰撞风险"),
ET.NO_ENTRY: NoEntryAlert("AEB: Risk of Collision"),
},
EventName.stockAeb: {
ET.PERMANENT: Alert(
"刹车!",
"原厂AEB存在碰撞风险",
"BRAKE!",
"Stock AEB: Risk of Collision",
AlertStatus.critical, AlertSize.full,
Priority.HIGHEST, VisualAlert.fcw, AudibleAlert.stopStop, 2.),
ET.NO_ENTRY: NoEntryAlert("原厂AEB存在碰撞风险"),
ET.NO_ENTRY: NoEntryAlert("Stock AEB: Risk of Collision"),
},
EventName.fcw: {
ET.PERMANENT: Alert(
"刹车!",
"存在碰撞风险",
"BRAKE!",
"Risk of Collision",
AlertStatus.critical, AlertSize.full,
Priority.HIGHEST, VisualAlert.fcw, AudibleAlert.stopStop, 2.),
},
EventName.ldw: {
ET.PERMANENT: Alert(
"检测到车道偏离",
"Lane Departure Detected",
"",
AlertStatus.userPrompt, AlertSize.small,
Priority.LOW, VisualAlert.ldw, AudibleAlert.prompt, 3.),
@@ -492,7 +492,7 @@ EVENTS: dict[int, dict[str, Alert | AlertCallbackType]] = {
EventName.steerTempUnavailableSilent: {
ET.WARNING: Alert(
"小鸽提醒:驻车中...",
"Steering Temporarily Unavailable",
"",
AlertStatus.userPrompt, AlertSize.small,
Priority.LOW, VisualAlert.steerRequired, AudibleAlert.none, 1.8),
@@ -500,7 +500,7 @@ EVENTS: dict[int, dict[str, Alert | AlertCallbackType]] = {
EventName.preDriverDistracted: {
ET.WARNING: Alert(
"请注意驾驶",
"Pay Attention",
"",
AlertStatus.normal, AlertSize.small,
Priority.LOW, VisualAlert.none, AudibleAlert.none, .1),
@@ -508,23 +508,23 @@ EVENTS: dict[int, dict[str, Alert | AlertCallbackType]] = {
EventName.promptDriverDistracted: {
ET.WARNING: Alert(
"请注意驾驶",
"驾驶员分心",
"Pay Attention",
"Driver Distracted",
AlertStatus.userPrompt, AlertSize.mid,
Priority.MID, VisualAlert.steerRequired, AudibleAlert.promptDistracted, .1),
},
EventName.driverDistracted: {
ET.WARNING: Alert(
"请立即解除",
"驾驶员分心",
"DISENGAGE IMMEDIATELY",
"Driver Distracted",
AlertStatus.critical, AlertSize.full,
Priority.HIGH, VisualAlert.steerRequired, AudibleAlert.warningImmediate, .1),
},
EventName.preDriverUnresponsive: {
ET.WARNING: Alert(
"请握住方向盘:未检测到人脸",
"Touch Steering Wheel: No Face Detected",
"",
AlertStatus.normal, AlertSize.small,
Priority.LOW, VisualAlert.steerRequired, AudibleAlert.none, .1),
@@ -532,31 +532,31 @@ EVENTS: dict[int, dict[str, Alert | AlertCallbackType]] = {
EventName.promptDriverUnresponsive: {
ET.WARNING: Alert(
"请握住方向盘",
"驾驶员无响应",
"Touch Steering Wheel",
"Driver Unresponsive",
AlertStatus.userPrompt, AlertSize.mid,
Priority.MID, VisualAlert.steerRequired, AudibleAlert.promptDistracted, .1),
},
EventName.driverUnresponsive: {
ET.WARNING: Alert(
"请立即解除",
"驾驶员无响应",
"DISENGAGE IMMEDIATELY",
"Driver Unresponsive",
AlertStatus.critical, AlertSize.full,
Priority.HIGH, VisualAlert.steerRequired, AudibleAlert.warningImmediate, .1),
},
EventName.manualRestart: {
ET.WARNING: Alert(
"请接管",
"请手动恢复驾驶",
"TAKE CONTROL",
"Resume Driving Manually",
AlertStatus.userPrompt, AlertSize.mid,
Priority.LOW, VisualAlert.none, AudibleAlert.none, .2),
},
EventName.resumeRequired: {
ET.WARNING: Alert(
"按下恢复以结束静止",
"Press Resume to Exit Standstill",
"",
AlertStatus.userPrompt, AlertSize.small,
Priority.LOW, VisualAlert.none, AudibleAlert.none, .2),
@@ -568,7 +568,7 @@ EVENTS: dict[int, dict[str, Alert | AlertCallbackType]] = {
EventName.preLaneChangeLeft: {
ET.WARNING: Alert(
"确认安全后向左转向开始变道",
"Steer Left to Start Lane Change Once Safe",
"",
AlertStatus.normal, AlertSize.none,
Priority.LOW, VisualAlert.none, AudibleAlert.none, .1),
@@ -576,7 +576,7 @@ EVENTS: dict[int, dict[str, Alert | AlertCallbackType]] = {
EventName.preLaneChangeRight: {
ET.WARNING: Alert(
"确认安全后向右转向开始变道",
"Steer Right to Start Lane Change Once Safe",
"",
AlertStatus.normal, AlertSize.none,
Priority.LOW, VisualAlert.none, AudibleAlert.none, .1),
@@ -584,7 +584,7 @@ EVENTS: dict[int, dict[str, Alert | AlertCallbackType]] = {
EventName.laneChangeBlocked: {
ET.WARNING: Alert(
"盲区内检测到车辆",
"Car Detected in Blindspot",
"",
AlertStatus.userPrompt, AlertSize.none,
Priority.LOW, VisualAlert.none, AudibleAlert.bsdWarning, .1),
@@ -592,7 +592,7 @@ EVENTS: dict[int, dict[str, Alert | AlertCallbackType]] = {
EventName.laneChange: {
ET.WARNING: Alert(
"正在变道",
"Changing Lanes",
"",
AlertStatus.normal, AlertSize.none,
Priority.LOW, VisualAlert.none, AudibleAlert.none, .1),
@@ -600,41 +600,41 @@ EVENTS: dict[int, dict[str, Alert | AlertCallbackType]] = {
EventName.steerSaturated: {
ET.WARNING: Alert(
"请接管",
"转向角超出限制",
"Take Control",
"Turn Exceeds Steering Limit",
AlertStatus.normal, AlertSize.small,
Priority.LOW, VisualAlert.none, AudibleAlert.none, 1.),
},
# Thrown when the fan is driven at >50% but is not rotating
EventName.fanMalfunction: {
ET.PERMANENT: NormalPermanentAlert("风扇故障", "可能是硬件问题"),
ET.PERMANENT: NormalPermanentAlert("Fan Malfunction", "Likely Hardware Issue"),
},
# Camera is not outputting frames
EventName.cameraMalfunction: {
ET.PERMANENT: camera_malfunction_alert,
ET.SOFT_DISABLE: soft_disable_alert("摄像头故障"),
ET.NO_ENTRY: NoEntryAlert("摄像头故障:请重启设备"),
ET.SOFT_DISABLE: soft_disable_alert("Camera Malfunction"),
ET.NO_ENTRY: NoEntryAlert("Camera Malfunction: Reboot Your Device"),
},
# Camera framerate too low
EventName.cameraFrameRate: {
ET.PERMANENT: NormalPermanentAlert("摄像头帧率过低", "请重启设备"),
ET.SOFT_DISABLE: soft_disable_alert("摄像头帧率过低"),
ET.NO_ENTRY: NoEntryAlert("摄像头帧率过低:请重启设备"),
ET.PERMANENT: NormalPermanentAlert("Camera Frame Rate Low", "Reboot your Device"),
ET.SOFT_DISABLE: soft_disable_alert("Camera Frame Rate Low"),
ET.NO_ENTRY: NoEntryAlert("Camera Frame Rate Low: Reboot Your Device"),
},
# Unused
EventName.locationdTemporaryError: {
ET.NO_ENTRY: NoEntryAlert("locationd临时错误"),
ET.SOFT_DISABLE: soft_disable_alert("locationd临时错误"),
ET.NO_ENTRY: NoEntryAlert("locationd Temporary Error"),
ET.SOFT_DISABLE: soft_disable_alert("locationd Temporary Error"),
},
EventName.locationdPermanentError: {
ET.NO_ENTRY: NoEntryAlert("locationd永久错误"),
ET.IMMEDIATE_DISABLE: ImmediateDisableAlert("locationd永久错误"),
ET.PERMANENT: NormalPermanentAlert("locationd永久错误"),
ET.NO_ENTRY: NoEntryAlert("locationd Permanent Error"),
ET.IMMEDIATE_DISABLE: ImmediateDisableAlert("locationd Permanent Error"),
ET.PERMANENT: NormalPermanentAlert("locationd Permanent Error"),
},
# openpilot tries to learn certain parameters about your car by observing
@@ -647,13 +647,13 @@ EVENTS: dict[int, dict[str, Alert | AlertCallbackType]] = {
# bad alignment or bad sensor data. If this happens consistently consider creating an issue on GitHub
EventName.paramsdTemporaryError: {
ET.NO_ENTRY: paramsd_invalid_alert,
ET.SOFT_DISABLE: soft_disable_alert("paramsd临时错误"),
ET.SOFT_DISABLE: soft_disable_alert("paramsd Temporary Error"),
},
EventName.paramsdPermanentError: {
ET.NO_ENTRY: NoEntryAlert("paramsd永久错误"),
ET.IMMEDIATE_DISABLE: ImmediateDisableAlert("paramsd永久错误"),
ET.PERMANENT: NormalPermanentAlert("paramsd永久错误"),
ET.NO_ENTRY: NoEntryAlert("paramsd Permanent Error"),
ET.IMMEDIATE_DISABLE: ImmediateDisableAlert("paramsd Permanent Error"),
ET.PERMANENT: NormalPermanentAlert("paramsd Permanent Error"),
},
# ********** events that affect controls state transitions **********
@@ -672,12 +672,12 @@ EVENTS: dict[int, dict[str, Alert | AlertCallbackType]] = {
EventName.buttonCancel: {
ET.USER_DISABLE: EngagementAlert(AudibleAlert.disengage),
ET.NO_ENTRY: NoEntryAlert("已按下取消"),
ET.NO_ENTRY: NoEntryAlert("Cancel Pressed"),
},
EventName.brakeHold: {
ET.WARNING: Alert(
"按下恢复以解除制动保持",
"Press Resume to Exit Brake Hold",
"",
AlertStatus.userPrompt, AlertSize.small,
Priority.LOW, VisualAlert.none, AudibleAlert.none, .2),
@@ -685,18 +685,18 @@ EVENTS: dict[int, dict[str, Alert | AlertCallbackType]] = {
EventName.parkBrake: {
ET.USER_DISABLE: EngagementAlert(AudibleAlert.disengage),
ET.NO_ENTRY: NoEntryAlert("驻车制动已启用"),
ET.NO_ENTRY: NoEntryAlert("Parking Brake Engaged"),
},
EventName.pedalPressed: {
ET.USER_DISABLE: EngagementAlert(AudibleAlert.disengage),
ET.NO_ENTRY: NoEntryAlert("踏板被踩下",
ET.NO_ENTRY: NoEntryAlert("Pedal Pressed",
visual_alert=VisualAlert.brakePressed),
},
EventName.preEnableStandstill: {
ET.PRE_ENABLE: Alert(
"松开刹车以接入",
"Release Brake to Engage",
"",
AlertStatus.normal, AlertSize.small,
Priority.LOWEST, VisualAlert.none, AudibleAlert.none, .1, creation_delay=1.),
@@ -724,27 +724,27 @@ EVENTS: dict[int, dict[str, Alert | AlertCallbackType]] = {
},
EventName.resumeBlocked: {
ET.NO_ENTRY: NoEntryAlert("按下设定以接入"),
ET.NO_ENTRY: NoEntryAlert("Press Set to Engage"),
},
EventName.wrongCruiseMode: {
ET.USER_DISABLE: EngagementAlert(AudibleAlert.disengage),
ET.NO_ENTRY: NoEntryAlert("自适应巡航已关闭"),
ET.NO_ENTRY: NoEntryAlert("Adaptive Cruise Disabled"),
},
EventName.steerTempUnavailable: {
ET.SOFT_DISABLE: soft_disable_alert("转向暂时不可用"),
ET.NO_ENTRY: NoEntryAlert("转向暂时不可用"),
ET.SOFT_DISABLE: soft_disable_alert("Steering Temporarily Unavailable"),
ET.NO_ENTRY: NoEntryAlert("Steering Temporarily Unavailable"),
},
EventName.steerTimeLimit: {
ET.SOFT_DISABLE: soft_disable_alert("车辆转向时间限制"),
ET.NO_ENTRY: NoEntryAlert("车辆转向时间限制"),
ET.SOFT_DISABLE: soft_disable_alert("Vehicle Steering Time Limit"),
ET.NO_ENTRY: NoEntryAlert("Vehicle Steering Time Limit"),
},
EventName.outOfSpace: {
ET.PERMANENT: out_of_space_alert,
ET.NO_ENTRY: NoEntryAlert("存储空间不足"),
ET.NO_ENTRY: NoEntryAlert("Out of Storage"),
},
EventName.belowEngageSpeed: {
@@ -753,36 +753,36 @@ EVENTS: dict[int, dict[str, Alert | AlertCallbackType]] = {
EventName.sensorDataInvalid: {
ET.PERMANENT: Alert(
"传感器数据无效",
"可能是硬件问题",
"Sensor Data Invalid",
"Possible Hardware Issue",
AlertStatus.normal, AlertSize.mid,
Priority.LOWER, VisualAlert.none, AudibleAlert.none, .2, creation_delay=1.),
ET.NO_ENTRY: NoEntryAlert("传感器数据无效"),
ET.SOFT_DISABLE: soft_disable_alert("传感器数据无效"),
ET.NO_ENTRY: NoEntryAlert("Sensor Data Invalid"),
ET.SOFT_DISABLE: soft_disable_alert("Sensor Data Invalid"),
},
EventName.noGps: {
ET.PERMANENT: Alert(
"GPS信号弱",
"请确保设备具有开阔的天空视野",
"Poor GPS reception",
"Ensure device has a clear view of the sky",
AlertStatus.normal, AlertSize.mid,
Priority.LOWER, VisualAlert.none, AudibleAlert.none, .2, creation_delay=600.)
},
EventName.tooDistracted: {
ET.NO_ENTRY: NoEntryAlert("分心程度过高"),
ET.NO_ENTRY: NoEntryAlert("Distraction Level Too High"),
},
EventName.overheat: {
ET.PERMANENT: overheat_alert,
ET.SOFT_DISABLE: soft_disable_alert("系统过热"),
ET.NO_ENTRY: NoEntryAlert("系统过热"),
ET.SOFT_DISABLE: soft_disable_alert("System Overheated"),
ET.NO_ENTRY: NoEntryAlert("System Overheated"),
},
EventName.wrongGear: {
ET.USER_DISABLE: EngagementAlert(AudibleAlert.disengage), #carrot
#ET.SOFT_DISABLE: user_soft_disable_alert("Gear not D"),
ET.NO_ENTRY: NoEntryAlert("挡位非D挡"),
ET.NO_ENTRY: NoEntryAlert("Gear not D"),
},
# This alert is thrown when the calibration angles are outside of the acceptable range.
@@ -792,40 +792,40 @@ EVENTS: dict[int, dict[str, Alert | AlertCallbackType]] = {
# See https://comma.ai/setup for more information
EventName.calibrationInvalid: {
ET.PERMANENT: calibration_invalid_alert,
ET.SOFT_DISABLE: soft_disable_alert("校准无效:请重新安装设备并重新校准"),
ET.NO_ENTRY: NoEntryAlert("校准无效:请重新安装设备并重新校准"),
ET.SOFT_DISABLE: soft_disable_alert("Calibration Invalid: Remount Device & Recalibrate"),
ET.NO_ENTRY: NoEntryAlert("Calibration Invalid: Remount Device & Recalibrate"),
},
EventName.calibrationIncomplete: {
ET.PERMANENT: calibration_incomplete_alert,
ET.SOFT_DISABLE: soft_disable_alert("校准未完成"),
ET.NO_ENTRY: NoEntryAlert("校准进行中"),
ET.SOFT_DISABLE: soft_disable_alert("Calibration Incomplete"),
ET.NO_ENTRY: NoEntryAlert("Calibration in Progress"),
},
EventName.calibrationRecalibrating: {
ET.PERMANENT: calibration_incomplete_alert,
ET.SOFT_DISABLE: soft_disable_alert("检测到设备重新安装:重新校准中"),
ET.NO_ENTRY: NoEntryAlert("检测到重新安装:正在重新校准"),
ET.SOFT_DISABLE: soft_disable_alert("Device Remount Detected: Recalibrating"),
ET.NO_ENTRY: NoEntryAlert("Remount Detected: Recalibrating"),
},
EventName.doorOpen: {
ET.SOFT_DISABLE: user_soft_disable_alert("车门已打开"),
ET.NO_ENTRY: NoEntryAlert("车门已打开"),
ET.SOFT_DISABLE: user_soft_disable_alert("Door Open"),
ET.NO_ENTRY: NoEntryAlert("Door Open"),
},
EventName.seatbeltNotLatched: {
ET.SOFT_DISABLE: user_soft_disable_alert("安全带未扣"),
ET.NO_ENTRY: NoEntryAlert("安全带未扣"),
ET.SOFT_DISABLE: user_soft_disable_alert("Seatbelt Unlatched"),
ET.NO_ENTRY: NoEntryAlert("Seatbelt Unlatched"),
},
EventName.espDisabled: {
ET.SOFT_DISABLE: soft_disable_alert("电子稳定控制已关闭"),
ET.NO_ENTRY: NoEntryAlert("电子稳定控制已关闭"),
ET.SOFT_DISABLE: soft_disable_alert("Electronic Stability Control Disabled"),
ET.NO_ENTRY: NoEntryAlert("Electronic Stability Control Disabled"),
},
EventName.lowBattery: {
ET.SOFT_DISABLE: soft_disable_alert("电量低"),
ET.NO_ENTRY: NoEntryAlert("电量低"),
ET.SOFT_DISABLE: soft_disable_alert("Low Battery"),
ET.NO_ENTRY: NoEntryAlert("Low Battery"),
},
# Different openpilot services communicate between each other at a certain
@@ -833,41 +833,41 @@ EVENTS: dict[int, dict[str, Alert | AlertCallbackType]] = {
# is thrown. This can mean a service crashed, did not broadcast a message for
# ten times the regular interval, or the average interval is more than 10% too high.
EventName.commIssue: {
ET.SOFT_DISABLE: soft_disable_alert("进程间通信异常"),
ET.SOFT_DISABLE: soft_disable_alert("Communication Issue Between Processes"),
ET.NO_ENTRY: comm_issue_alert,
},
EventName.commIssueAvgFreq: {
ET.SOFT_DISABLE: soft_disable_alert("进程间通信速率低"),
ET.NO_ENTRY: NoEntryAlert("进程间通信速率低"),
ET.SOFT_DISABLE: soft_disable_alert("Low Communication Rate Between Processes"),
ET.NO_ENTRY: NoEntryAlert("Low Communication Rate Between Processes"),
},
EventName.selfdrivedLagging: {
ET.SOFT_DISABLE: soft_disable_alert("系统运行缓慢"),
ET.NO_ENTRY: NoEntryAlert("自驾进程延迟:请重启设备"),
ET.SOFT_DISABLE: soft_disable_alert("System Lagging"),
ET.NO_ENTRY: NoEntryAlert("Selfdrive Process Lagging: Reboot Your Device"),
},
# Thrown when manager detects a service exited unexpectedly while driving
EventName.processNotRunning: {
ET.NO_ENTRY: process_not_running_alert,
ET.SOFT_DISABLE: soft_disable_alert("进程未运行"),
ET.SOFT_DISABLE: soft_disable_alert("Process Not Running"),
},
EventName.radarFault: {
ET.SOFT_DISABLE: soft_disable_alert("雷达错误:请重启车辆"),
ET.NO_ENTRY: NoEntryAlert("雷达错误:请重启车辆"),
ET.SOFT_DISABLE: soft_disable_alert("Radar Error: Restart the Car"),
ET.NO_ENTRY: NoEntryAlert("Radar Error: Restart the Car"),
},
EventName.radarTempUnavailable: {
ET.SOFT_DISABLE: soft_disable_alert("雷达暂时不可用"),
ET.NO_ENTRY: NoEntryAlert("雷达暂时不可用"),
ET.SOFT_DISABLE: soft_disable_alert("Radar Temporarily Unavailable"),
ET.NO_ENTRY: NoEntryAlert("Radar Temporarily Unavailable"),
},
# Every frame from the camera should be processed by the model. If modeld
# is not processing frames fast enough they have to be dropped. This alert is
# thrown when over 20% of frames are dropped.
EventName.modeldLagging: {
ET.SOFT_DISABLE: soft_disable_alert("驾驶模型延迟"),
ET.NO_ENTRY: NoEntryAlert("驾驶模型延迟"),
ET.SOFT_DISABLE: soft_disable_alert("Driving Model Lagging"),
ET.NO_ENTRY: NoEntryAlert("Driving Model Lagging"),
ET.PERMANENT: modeld_lagging_alert,
},
@@ -877,45 +877,45 @@ EVENTS: dict[int, dict[str, Alert | AlertCallbackType]] = {
# usually means the model has trouble understanding the scene. This is used
# as a heuristic to warn the driver.
EventName.posenetInvalid: {
ET.SOFT_DISABLE: soft_disable_alert("Posenet速度无效"),
ET.SOFT_DISABLE: soft_disable_alert("Posenet Speed Invalid"),
ET.NO_ENTRY: posenet_invalid_alert,
},
# When the localizer detects an acceleration of more than 40 m/s^2 (~4G) we
# alert the driver the device might have fallen from the windshield.
EventName.deviceFalling: {
ET.SOFT_DISABLE: soft_disable_alert("设备从支架掉落"),
ET.NO_ENTRY: NoEntryAlert("设备从支架掉落"),
ET.SOFT_DISABLE: soft_disable_alert("Device Fell Off Mount"),
ET.NO_ENTRY: NoEntryAlert("Device Fell Off Mount"),
},
EventName.lowMemory: {
ET.SOFT_DISABLE: soft_disable_alert("内存不足:请重启设备"),
ET.SOFT_DISABLE: soft_disable_alert("Low Memory: Reboot Your Device"),
ET.PERMANENT: low_memory_alert,
ET.NO_ENTRY: NoEntryAlert("内存不足:请重启设备"),
ET.NO_ENTRY: NoEntryAlert("Low Memory: Reboot Your Device"),
},
EventName.accFaulted: {
ET.IMMEDIATE_DISABLE: ImmediateDisableAlert("巡航acc故障请重启车辆"),
ET.PERMANENT: NormalPermanentAlert("巡航故障:重启车辆后再接入"),
ET.NO_ENTRY: NoEntryAlert("巡航故障:请重启车辆"),
ET.IMMEDIATE_DISABLE: ImmediateDisableAlert("Cruise accFault: Restart the Car"),
ET.PERMANENT: NormalPermanentAlert("Cruise Fault: Restart the car to engage"),
ET.NO_ENTRY: NoEntryAlert("Cruise Fault: Restart the Car"),
},
EventName.espActive: {
ET.SOFT_DISABLE: soft_disable_alert("电子稳定控制介入"),
ET.NO_ENTRY: NoEntryAlert("电子稳定控制介入"),
ET.SOFT_DISABLE: soft_disable_alert("Electronic Stability Control Active"),
ET.NO_ENTRY: NoEntryAlert("Electronic Stability Control Active"),
},
EventName.controlsMismatch: {
ET.IMMEDIATE_DISABLE: ImmediateDisableAlert("控制不匹配"),
ET.NO_ENTRY: NoEntryAlert("控制不匹配"),
ET.IMMEDIATE_DISABLE: ImmediateDisableAlert("Controls Mismatch"),
ET.NO_ENTRY: NoEntryAlert("Controls Mismatch"),
},
# Sometimes the USB stack on the device can get into a bad state
# causing the connection to the panda to be lost
EventName.usbError: {
ET.SOFT_DISABLE: soft_disable_alert("USB错误:请重启设备"),
ET.PERMANENT: NormalPermanentAlert("USB错误:请重启设备", ""),
ET.NO_ENTRY: NoEntryAlert("USB错误:请重启设备"),
ET.SOFT_DISABLE: soft_disable_alert("USB Error: Reboot Your Device"),
ET.PERMANENT: NormalPermanentAlert("USB Error: Reboot Your Device", ""),
ET.NO_ENTRY: NoEntryAlert("USB Error: Reboot Your Device"),
},
# This alert can be thrown for the following reasons:
@@ -924,46 +924,46 @@ EVENTS: dict[int, dict[str, Alert | AlertCallbackType]] = {
# If you're not writing a new car port, this is usually cause by faulty wiring
EventName.canError: {
ET.PERMANENT: car_parser_result,
ET.IMMEDIATE_DISABLE: ImmediateDisableAlert("CAN错误"),
ET.IMMEDIATE_DISABLE: ImmediateDisableAlert("CAN Error"),
#ET.PERMANENT: Alert(
# "CAN Error: Check Connections",
# "",
# AlertStatus.normal, AlertSize.small,
# Priority.LOW, VisualAlert.none, AudibleAlert.none, 1., creation_delay=1.),
ET.NO_ENTRY: NoEntryAlert("CAN错误:请检查连接"),
ET.NO_ENTRY: NoEntryAlert("CAN Error: Check Connections"),
},
EventName.canBusMissing: {
ET.PERMANENT: car_parser_result,
ET.IMMEDIATE_DISABLE: ImmediateDisableAlert("CAN总线已断开"),
ET.IMMEDIATE_DISABLE: ImmediateDisableAlert("CAN Bus Disconnected"),
#ET.PERMANENT: Alert(
# "CAN Bus Disconnected: Likely Faulty Cable",
# "",
# AlertStatus.normal, AlertSize.small,
# Priority.LOW, VisualAlert.none, AudibleAlert.none, 1., creation_delay=1.),
ET.NO_ENTRY: NoEntryAlert("CAN总线断开:请检查连接"),
ET.NO_ENTRY: NoEntryAlert("CAN Bus Disconnected: Check Connections"),
},
EventName.steerUnavailable: {
ET.IMMEDIATE_DISABLE: ImmediateDisableAlert("LKAS故障:请重启车辆"),
ET.PERMANENT: ImmediateDisableAlert("LKAS故障:重启车辆后再接入"),
ET.NO_ENTRY: NoEntryAlert("LKAS故障:请重启车辆"),
ET.IMMEDIATE_DISABLE: ImmediateDisableAlert("LKAS Fault: Restart the Car"),
ET.PERMANENT: ImmediateDisableAlert("LKAS Fault: Restart the car to engage"),
ET.NO_ENTRY: NoEntryAlert("LKAS Fault: Restart the Car"),
},
EventName.reverseGear: {
ET.PERMANENT: Alert(
"倒车\n",
"Reverse\nGear",
"",
AlertStatus.normal, AlertSize.none,
Priority.LOWEST, VisualAlert.none, AudibleAlert.reverseGear, .2, creation_delay=0.5),
ET.SOFT_DISABLE: SoftDisableAlert("倒挡"),
ET.NO_ENTRY: NoEntryAlert("倒挡"),
ET.SOFT_DISABLE: SoftDisableAlert("Reverse Gear"),
ET.NO_ENTRY: NoEntryAlert("Reverse Gear"),
},
# On cars that use stock ACC the car can decide to cancel ACC for various reasons.
# When this happens we can no long control the car so the user needs to be warned immediately.
EventName.cruiseDisabled: {
ET.IMMEDIATE_DISABLE: ImmediateDisableAlert("巡航已关闭"),
ET.IMMEDIATE_DISABLE: ImmediateDisableAlert("Cruise Is Off"),
},
# When the relay in the harness box opens the CAN bus between the LKAS camera
@@ -971,15 +971,15 @@ EVENTS: dict[int, dict[str, Alert | AlertCallbackType]] = {
# are received on the car side this usually means the relay hasn't opened correctly
# and this alert is thrown.
EventName.relayMalfunction: {
ET.IMMEDIATE_DISABLE: ImmediateDisableAlert("线束继电器故障"),
ET.PERMANENT: NormalPermanentAlert("线束继电器故障", "请检查硬件"),
ET.NO_ENTRY: NoEntryAlert("线束继电器故障"),
ET.IMMEDIATE_DISABLE: ImmediateDisableAlert("Harness Relay Malfunction"),
ET.PERMANENT: NormalPermanentAlert("Harness Relay Malfunction", "Check Hardware"),
ET.NO_ENTRY: NoEntryAlert("Harness Relay Malfunction"),
},
EventName.speedTooLow: {
ET.IMMEDIATE_DISABLE: Alert(
"openpilot已取消",
"车速过低",
"openpilot Canceled",
"Speed too low",
AlertStatus.normal, AlertSize.mid,
Priority.HIGH, VisualAlert.none, AudibleAlert.disengage, 3.),
},
@@ -987,17 +987,17 @@ EVENTS: dict[int, dict[str, Alert | AlertCallbackType]] = {
# When the car is driving faster than most cars in the training data, the model outputs can be unpredictable.
EventName.speedTooHigh: {
ET.WARNING: Alert(
"车速过高",
"模型在该车速下存在不确定性",
"Speed Too High",
"Model uncertain at this speed",
AlertStatus.userPrompt, AlertSize.mid,
Priority.HIGH, VisualAlert.steerRequired, AudibleAlert.promptRepeat, 4.),
ET.NO_ENTRY: NoEntryAlert("请减速后接入"),
ET.NO_ENTRY: NoEntryAlert("Slow down to engage"),
},
EventName.vehicleSensorsInvalid: {
ET.IMMEDIATE_DISABLE: ImmediateDisableAlert("车辆传感器无效"),
ET.PERMANENT: NormalPermanentAlert("车辆传感器校准中", "请行驶以完成校准"),
ET.NO_ENTRY: NoEntryAlert("车辆传感器校准中"),
ET.IMMEDIATE_DISABLE: ImmediateDisableAlert("Vehicle Sensors Invalid"),
ET.PERMANENT: NormalPermanentAlert("Vehicle Sensors Calibrating", "Drive to Calibrate"),
ET.NO_ENTRY: NoEntryAlert("Vehicle Sensors Calibrating"),
},
EventName.personalityChanged: {
@@ -1006,7 +1006,7 @@ EVENTS: dict[int, dict[str, Alert | AlertCallbackType]] = {
EventName.softHold: {
ET.WARNING: Alert(
"软保持",
"SoftHold",
"",
AlertStatus.normal, AlertSize.small,
Priority.LOW, VisualAlert.none, AudibleAlert.none, .1),
@@ -1044,14 +1044,14 @@ EVENTS: dict[int, dict[str, Alert | AlertCallbackType]] = {
},
EventName.trafficSignChanged: {
ET.WARNING: Alert(
"信号灯已变化",
"신호가바뀌었어요.",
"",
AlertStatus.normal, AlertSize.small,
Priority.LOW, VisualAlert.none, AudibleAlert.trafficSignChanged, 1.),
},
EventName.turningLeft: {
ET.WARNING: Alert(
"左转中",
"Turning Left",
"",
AlertStatus.normal, AlertSize.small,
Priority.LOW, VisualAlert.none, AudibleAlert.none, .1),
@@ -1059,7 +1059,7 @@ EVENTS: dict[int, dict[str, Alert | AlertCallbackType]] = {
EventName.turningRight: {
ET.WARNING: Alert(
"右转中",
"Turning Right",
"",
AlertStatus.normal, AlertSize.small,
Priority.LOW, VisualAlert.none, AudibleAlert.none, .1),

View File

@@ -1955,14 +1955,6 @@ This may take up to a minute.</source>
<source>Disable Updates</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>OffRoad Mode</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>SET OFF</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>SshControl</name>

View File

@@ -1939,14 +1939,6 @@ This may take up to a minute.</source>
<source>Disable Updates</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>OffRoad Mode</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>SET OFF</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>SshControl</name>

View File

@@ -1939,14 +1939,6 @@ Esto puede tardar un minuto.</translation>
<source>Disable Updates</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>OffRoad Mode</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>SET OFF</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>SshControl</name>

View File

@@ -1939,14 +1939,6 @@ Cela peut prendre jusqu&apos;à une minute.</translation>
<source>Disable Updates</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>OffRoad Mode</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>SET OFF</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>SshControl</name>

View File

@@ -1935,14 +1935,6 @@ This may take up to a minute.</source>
<source>Disable Updates</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>OffRoad Mode</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>SET OFF</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>SshControl</name>

View File

@@ -1981,14 +1981,6 @@ This may take up to a minute.</source>
<source>Disable Updates</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>OffRoad Mode</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>SET OFF</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>SshControl</name>

View File

@@ -1939,14 +1939,6 @@ Isso pode levar até um minuto.</translation>
<source>Disable Updates</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>OffRoad Mode</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>SET OFF</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>SshControl</name>

View File

@@ -1935,14 +1935,6 @@ This may take up to a minute.</source>
<source>Disable Updates</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>OffRoad Mode</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>SET OFF</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>SshControl</name>

View File

@@ -1929,14 +1929,6 @@ This may take up to a minute.</source>
<source>Disable Updates</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>OffRoad Mode</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>SET OFF</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>SshControl</name>

View File

@@ -1913,14 +1913,6 @@ This may take up to a minute.</source>
<source>Disable Updates</source>
<translation></translation>
</message>
<message>
<source>OffRoad Mode</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>SET OFF</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>SshControl</name>

View File

@@ -1935,14 +1935,6 @@ This may take up to a minute.</source>
<source>Disable Updates</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>OffRoad Mode</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>SET OFF</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>SshControl</name>