add tang dmi24
This commit is contained in:
@@ -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
@@ -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]
|
||||
|
||||
@@ -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";
|
||||
|
||||
@@ -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__
|
||||
|
||||
Binary file not shown.
@@ -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),
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -1939,14 +1939,6 @@ Cela peut prendre jusqu'à 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>
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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>
|
||||
|
||||
Reference in New Issue
Block a user