mirror of
https://github.com/dragonpilot/dragonpilot.git
synced 2026-09-30 19:33:42 +08:00
dragonpilot 0.7.5.2
======================== * Added support to VW MQB/PQ platform. (Thanks to @dingliangxue) * Updated to stop charging after 3 hrs. (Thanks to @Wei) * Removed Impact Detection in Dashcam. * Fixed a bug caused by enabling "Noctua Mod". (Thanks to @阿濤) * Fixed alert issue in waze mode. (Thanks to @axandres) * Fixed unable to display "UPDATING" icon issue. * Added "Allow Continuous Auto Lane Change" Toggle. (Thanks to @阿濤) * Fixed setting page crash issue. (Thanks to @salmankhan, @Wei) * Fixed issue that keep showing update prompt. (Thanks to @Sky Chang)
This commit is contained in:
@@ -1,3 +1,24 @@
|
||||
dragonpilot 0.7.5.2
|
||||
========================
|
||||
* 加入對 VW MQB/PQ 的支援。(感謝 @dingliangxue 移植)
|
||||
* Added support to VW MQB/PQ platform. (Thanks to @dingliangxue)
|
||||
* 修改成 3 小時後停止供電。(感謝 @Wei 建議)
|
||||
* Updated to stop charging after 3 hrs. (Thanks to @Wei)
|
||||
* 移除行車記錄下的「碰撞偵測」功能。
|
||||
* Removed Impact Detection in Dashcam.
|
||||
* 修正開啟「Noctua 風扇」模式導致的錯誤。(感謝 @阿濤 回報)
|
||||
* Fixed a bug caused by enabling "Noctua Mod". (Thanks to @阿濤)
|
||||
* 修正「位智模式」無法顯示警示的問題。(感謝 @axandres 回報)
|
||||
* Fixed alert issue in waze mode. (Thanks to @axandres)
|
||||
* 修正無法顯示更新中圖示的問題。
|
||||
* Fixed unable to display "UPDATING" icon issue.
|
||||
* 加入「允許多次自動換道」功能。(感謝 @阿濤 建議)
|
||||
* Added "Allow Continuous Auto Lane Change" Toggle. (Thanks to @阿濤)
|
||||
* 修正開機後設定頁面有時會錯誤的問題。(感謝 @salmankhan、@Wei 回報)
|
||||
* Fixed setting page crash issue. (Thanks to @salmankhan, @Wei)
|
||||
* 修正熄火後一直出現更新訊息的錯誤。(感謝 @Sky Chang 回報)
|
||||
* Fixed issue that keep showing update prompt. (Thanks to @Sky Chang)
|
||||
|
||||
dragonpilot 0.7.5.1
|
||||
========================
|
||||
* 修正因同時使用「社群功能」和「自定車型」造成的加減速問題。(特別感謝 @Wei、@Sky Chang、@Han9365、@鄧育林 的測試以及回報。)
|
||||
|
||||
@@ -1,3 +1,30 @@
|
||||
2020-05-25 (0.7.5)
|
||||
========================
|
||||
* 加入對 VW MQB/PQ 的支援。(感謝 @dingliangxue 移植)
|
||||
* Added support to VW MQB/PQ platform. (Thanks to @dingliangxue)
|
||||
|
||||
2020-05-21 (0.7.5)
|
||||
========================
|
||||
* 修改成 3 小時後停止供電。(感謝 @Wei 建議)
|
||||
* Updated to stop charging after 3 hrs. (Thanks to @Wei)
|
||||
* 移除行車記錄下的「碰撞偵測」功能。
|
||||
* Removed Impact Detection in Dashcam.
|
||||
* 修正開啟「Noctua 風扇」模式導致的錯誤。(感謝 @阿濤 回報)
|
||||
* Fixed a bug caused by enabling "Noctua Mod". (Thanks to @阿濤)
|
||||
* 修正「位智模式」無法顯示警示的問題。(感謝 @axandres 回報)
|
||||
* Fixed alert issue in waze mode. (Thanks to @axandres)
|
||||
* 修正無法顯示更新中圖示的問題。
|
||||
* Fixed unable to display "UPDATING" icon issue.
|
||||
|
||||
2020-05-20 (0.7.5)
|
||||
========================
|
||||
* 加入「允許多次自動換道」功能。(感謝 @阿濤 建議)
|
||||
* Added "Allow Continuous Auto Lane Change" Toggle. (Thanks to @阿濤)
|
||||
* 修正開機後設定頁面有時會錯誤的問題。(感謝 @salmankhan、@Wei 回報)
|
||||
* Fixed setting page crash issue. (Thanks to @salmankhan, @Wei)
|
||||
* 修正熄火後一直出現更新訊息的錯誤。(感謝 @Sky Chang 回報)
|
||||
* Fixed issue that keep showing update prompt. (Thanks to @Sky Chang)
|
||||
|
||||
2020-05-19 (0.7.5)
|
||||
========================
|
||||
* 加入 DragonEnableAutoUpdate 預設值。
|
||||
|
||||
Binary file not shown.
+2
-2
@@ -193,11 +193,11 @@ keys = {
|
||||
"DragonUIScreenOffDriving": [TxType.PERSISTENT],
|
||||
"DragonEnableAutoUpdate": [TxType.PERSISTENT],
|
||||
"DragonUIBrightness": [TxType.PERSISTENT],
|
||||
"DragonDashcamImpactDetect": [TxType.PERSISTENT],
|
||||
"DragonDashcamImpactDetectStarted": [TxType.CLEAR_ON_MANAGER_START],
|
||||
"DragonEnableUploadOnMobile": [TxType.PERSISTENT],
|
||||
"DragonEnableUploadOnHotspot": [TxType.PERSISTENT],
|
||||
"DragonMaxSpeedLimit": [TxType.PERSISTENT],
|
||||
"DragonEnableRating": [TxType.PERSISTENT],
|
||||
"DragonEnableContALC": [TxType.PERSISTENT],
|
||||
}
|
||||
|
||||
|
||||
|
||||
+386
-37
@@ -702,36 +702,58 @@ BO_ 1088 Getriebe_1: 8 XXX
|
||||
SG_ Status_Getriebe_und_Wandlerschu : 1|1@1+ (1,0) [0|0] "" XXX
|
||||
SG_ Schaltung_aktiv__Getriebe_1_ : 0|1@1+ (1,0) [0|0] "" XXX
|
||||
|
||||
BO_ 912 Gateway_Komfort_1: 6 XXX
|
||||
SG_ Bremslicht_Anhaenger : 47|1@1+ (1,0) [0|0] "" XXX
|
||||
SG_ Anhaenger_erkannt_Gateway : 46|1@1+ (1,0) [0|0] "" XXX
|
||||
SG_ ECD_AAG_unplausibel : 45|1@1+ (1,0) [0|0] "" XXX
|
||||
SG_ BLS_AAG_unplausibel : 44|1@1+ (1,0) [0|0] "" XXX
|
||||
SG_ Zaehler_Anhaenger : 40|4@1+ (1,0) [0|15] "" XXX
|
||||
SG_ Frei_Gateway_Komfort_1_4 : 34|6@1+ (1,0) [0|0] "" XXX
|
||||
SG_ ECD_ILM_unplausibel : 33|1@1+ (1,0) [0|0] "" XXX
|
||||
SG_ BLS_ILM_unplausibel : 32|1@1+ (1,0) [0|0] "" XXX
|
||||
SG_ Bremslicht_mitte_defekt : 31|1@1+ (1,0) [0|0] "" XXX
|
||||
SG_ Bremslicht_rechts_defekt : 30|1@1+ (1,0) [0|0] "" XXX
|
||||
SG_ Bremslicht_links_defekt : 29|1@1+ (1,0) [0|0] "" XXX
|
||||
SG_ Rueckfahrlicht_Gateway : 28|1@1+ (1,0) [0|0] "" XXX
|
||||
SG_ Zaehler_Bremslicht : 24|4@1+ (1,0) [0|15] "" XXX
|
||||
SG_ Frei_Gateway_Komfort_1_3 : 17|7@1+ (1,0) [0|0] "" XXX
|
||||
SG_ Fahrertuerkontakt : 16|1@1+ (1,0) [0|0] "" XXX
|
||||
SG_ RDK_Systemfehler : 15|1@1+ (1,0) [0|0] "" XXX
|
||||
SG_ RDK_Warnstufe_1 : 14|1@1+ (1,0) [0|0] "" XXX
|
||||
SG_ RDK_Warnstufe_2 : 13|1@1+ (1,0) [0|0] "" XXX
|
||||
SG_ Reifendruckwarnung_Reserverad : 12|1@1+ (1,0) [0|0] "" XXX
|
||||
SG_ Reifendruckwarnung_hinten_recht : 11|1@1+ (1,0) [0|0] "" XXX
|
||||
SG_ Reifendruckwarnung_hinten_links : 10|1@1+ (1,0) [0|0] "" XXX
|
||||
SG_ Reifendruckwarnung_vorn_rechts : 9|1@1+ (1,0) [0|0] "" XXX
|
||||
SG_ Reifendruckwarnung_vorn_links : 8|1@1+ (1,0) [0|0] "" XXX
|
||||
SG_ Frei_Gateway_Komfort_1_2 : 5|3@1+ (1,0) [0|0] "" XXX
|
||||
SG_ Fahrertuerkontakt_veraltet : 4|1@1+ (1,0) [0|0] "" XXX
|
||||
SG_ Frei_Gateway_Komfort_1_1 : 3|1@1+ (1,0) [0|0] "" XXX
|
||||
SG_ Licht_1_Botschaft_veraltet : 2|1@1+ (1,0) [0|0] "" XXX
|
||||
SG_ Anhaenger_Botschaft_veraltet : 1|1@1+ (1,0) [0|0] "" XXX
|
||||
SG_ Reifendruckwarnung_veraltet : 0|1@1+ (1,0) [0|0] "" XXX
|
||||
BO_ 912 Gate_Komf_1: 8 XXX
|
||||
SG_ GK1_Sta_RDK_Warn : 0|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ GK1_Sta_Anhaen : 1|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ GK1_Sta_Licht1 : 2|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ GK1_Sta_Licht3 : 3|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ GK1_Sta_Tuerkont : 4|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ GK1_Sta_Li_vorn : 5|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ GK1_SleepAckn : 7|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ GK1_CharismaModus m1 : 8|4@1+ (1,0) [0|15] "" XXX
|
||||
SG_ GK1_SamFktNr M : 12|4@1+ (1,0) [0|15] "" XXX
|
||||
SG_ GK1_Fa_Tuerkont : 16|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ GK1_RueckfahrSch : 17|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ GK1_ELV_verrieg : 18|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ GK1_Sta_Kessy_2 : 19|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ GK1_Sta_Stdhzg : 20|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ GK1_SH_Verbau : 21|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ GK1_ParkFrontWi : 22|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ GK1_KW_Warm : 23|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ BCM_Remotestart_Betrieb : 24|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ GK1_Rueckfahr : 28|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ GK1_BrLi_links : 29|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ GK1_BrLi_rechts : 30|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ GK1_BrLi_mitte : 31|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ GK1_BLS_ILM : 32|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ GK1_EDC_ILM : 33|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ GK1_Blinker_li : 34|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ GK1_Blinker_re : 35|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ GK1_def_P_verr : 36|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ GK1_LS1_Fernlicht : 37|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ GK1_Sta_Licht2 : 38|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ GK1_Sta_LSM : 39|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ GK1_Count_Anhaen : 40|4@1+ (1,0) [0|15] "" XXX
|
||||
SG_ GK1_BLS_AAG : 44|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ GK1_EDC_AAG : 45|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ GK1_Anhaenger : 46|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ GK1_BrLi_Anhaen : 47|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ GK1_Abblendlicht : 48|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ GK1_Fernlicht : 49|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ GK1_Wischer_vorn : 50|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ GK1_Sta_ILM_F_1 : 51|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ GK1_Abbl_VL_def : 52|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ GK1_Abbl_VR_def : 53|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ GK1_Blink_Autob : 54|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ GK1_Warnblk_Status : 55|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ GK1_SH_laeuft : 56|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ SH1_ein_Wasserpumpe : 57|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ GK1_Nebel_ein : 58|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ GK1_Bremslicht : 59|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ GK1_Anh_abgesteckt : 60|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ GK1_AnhKonLamp : 61|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ LDS_Stellung_AFL : 62|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ GK1_SH_Zusatzfkt : 63|1@1+ (1,0) [0|1] "" XXX
|
||||
|
||||
BO_ 1340 Fahrwerk_1: 1 XXX
|
||||
SG_ Frei_Fahrwerk_1_2 : 7|1@1+ (1,0) [0|0] "" XXX
|
||||
@@ -1040,11 +1062,338 @@ BO_ 1324 ADR_1: 8 XXX
|
||||
SG_ Zaehler_ADR_1 : 8|4@1+ (1,0) [0|15] "" XXX
|
||||
SG_ Momentenanforderung_ADR : 0|8@1+ (0.39,0) [0|99] "MDI" XXX
|
||||
|
||||
BO_ 210 PQ_HCA: 8 XXX
|
||||
SG_ HCA_Torque : 16|15@1+ (1,0) [0|32767] "" XXX
|
||||
SG_ UNK_Bit : 34|1@0+ (1,0) [0|1] "" XXX
|
||||
SG_ HCA_Torque_VZ : 31|1@0+ (1,0) [0|1] "" XXX
|
||||
SG_ PQ_HCA_BZ : 8|4@1+ (1,0) [0|15] "" XXX
|
||||
SG_ PQ_HCA_Checksum : 0|4@1+ (1,0) [0|15] "" XXX
|
||||
BO_ 1550 Einheiten_1: 2 XXX
|
||||
SG_ MFA_v_Einheit_02 : 0|1@1+ (1,0) [0|1] "" XXX
|
||||
|
||||
BO_ 1490 VIN_1: 8 XXX
|
||||
BO_ 872 ACC_System: 8 XXX
|
||||
SG_ ACS_Checksum : 0|8@1+ (1,0) [0|255] "" XXX
|
||||
SG_ ACS_Zaehler : 8|4@1+ (1,0) [0|15] "" XXX
|
||||
SG_ ACS_Sta_ADR : 12|2@1+ (1,0) [0|3] "" XXX
|
||||
SG_ ACS_ADR_Schub : 14|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ ACS_Schubabsch : 15|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ ACS_StSt_Info : 16|2@1+ (1,0) [0|3] "" XXX
|
||||
SG_ ACS_MomEingriff : 18|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ ACS_Typ_ACC : 19|2@1+ (1,0) [0|3] "" XXX
|
||||
SG_ ACS_FreigSollB : 23|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ ACS_Sollbeschl : 24|11@1+ (0.005,-7.22) [-7.22|3.005] "Unit_MeterPerSeconSquar" XXX
|
||||
SG_ ACS_Anhaltewunsch : 38|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ ACS_Fehler : 39|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ ACS_zul_Regelabw : 40|8@1+ (1,0.005) [0|1.265] "Unit_MeterPerSeconSquar" XXX
|
||||
SG_ ACS_max_AendGrad : 48|8@1+ (1,0.02) [0.02|5.06] "Unit_MeterPerSeconSquar" XXX
|
||||
|
||||
BO_ 1386 ACC_GRA_Anziege: 8 XXX
|
||||
SG_ ACA_Checksum : 0|8@1+ (1,0) [0|255] "" XXX
|
||||
SG_ ACA_StaACC : 8|3@1+ (1,0) [0|7] "" XXX
|
||||
SG_ ACA_ID_StaACC : 11|5@1+ (1,0) [0|31] "" XXX
|
||||
SG_ ACA_Fahrerhinw : 16|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ ACA_AnzDisplay : 17|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ ACA_Zeitluecke : 18|4@1+ (1,0) [0|15] "" XXX
|
||||
SG_ ACA_V_Wunsch : 24|8@1+ (1,0) [0|255] "Unit_KiloMeterPerHour" XXX
|
||||
SG_ ACA_kmh_mph : 32|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ ACA_Akustik1 : 33|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ ACA_Akustik2 : 34|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ ACA_PrioDisp : 35|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ ACA_gemZeitl : 40|4@1+ (1,0) [0|15] "" XXX
|
||||
SG_ ACA_ACC_Verz : 44|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ ACA_StaGRA : 48|3@1+ (1,0) [0|7] "" XXX
|
||||
SG_ ACA_ID_StaGRA : 51|5@1+ (1,0) [0|31] "" XXX
|
||||
SG_ ACA_Codierung : 56|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ ACA_Tachokranz : 57|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ ACA_Aend_Zeitluecke : 58|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ ACA_Zaehler : 60|4@1+ (1,0) [0|15] "" XXX
|
||||
|
||||
BO_ 208 Lenkhilfe_3: 8 XXX
|
||||
SG_ LH3_Checksumme : 0|8@1+ (1,0) [0|255] "" XXX
|
||||
SG_ LH3_BS_Spiegel : 8|4@1+ (1,0) [0|15] "" XXX
|
||||
SG_ LH3_Zaehler : 12|4@4+ (1,0) [0|15] "" XXX
|
||||
SG_ LH3_LM : 16|10@1+ (1,0) [0|1023] "" XXX
|
||||
SG_ LH3_LMSign : 26|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ LH3_LMValid : 27|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ LH3_Sta_DSR : 28|4@1+ (1,0) [0|15] "" XXX
|
||||
SG_ LH3_BLW : 32|12@1+ (0.15,0) [0|615] "" XXX
|
||||
SG_ LH3_BLWSign : 44|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ LH3_BLWValid : 45|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ LH3_Lenkungstyp : 46|2@1+ (1,0) [0|3] "" XXX
|
||||
|
||||
BO_ 978 Lenkhilfe_2: 8 XXX
|
||||
SG_ LH2_Checksumme : 0|8@1+ (1,0) [0|255] "" XXX
|
||||
SG_ LH2_Zaehler : 8|4@1+ (1,0) [0|15] "" XXX
|
||||
SG_ LH2_Geradeaus : 12|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ LH2_Sta_Charisma : 13|3@1+ (1,0) [0|7] "" XXX
|
||||
SG_ LH2_Sta_HCA : 16|4@1+ (1,0) [0|15] "" XXX
|
||||
SG_ LH2_Ausg_LW1 : 20|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ LH2_Ausg_LW1_gue : 21|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ LH2_StatEPS_PLA : 24|4@1+ (1,0) [0|15] "" XXX
|
||||
SG_ LH2_aktLenkeingriff : 32|8@1+ (1,0) [0|255] "" XXX
|
||||
SG_ LH2_PLA_Err : 48|4@1+ (1,0) [0|15] "" XXX
|
||||
SG_ LH2_PLA_Abbr : 52|4@1+ (1,0) [0|15] "" XXX
|
||||
|
||||
BO_ 210 HCA_1: 5 XXX
|
||||
SG_ HCA_Checksumme : 0|8@1+ (1,0) [0|15] "" XXX
|
||||
SG_ HCA_Zaehler : 8|4@1+ (1,0) [0|15] "" XXX
|
||||
SG_ HCA_Status : 12|4@1+ (1,0) [0|15] "" XXX
|
||||
SG_ LM_Offset : 16|15@1+ (0.03125,0) [0|300] "cNm" XXX
|
||||
SG_ LM_OffSign : 31|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ Vib_Freq : 32|4@1+ (4,0) [0|60] "Hz" XXX
|
||||
SG_ Vib_Amp : 36|4@1+ (0.5,0) [0|7.5] "Nm" XXX
|
||||
|
||||
BO_ 1470 LDW_1: 8 XXX
|
||||
SG_ Right_Lane_Status : 0|2@1+ (1,0) [0|3] "" XXX
|
||||
SG_ Left_Lane_Status : 2|2@1+ (1,0) [0|3] "" XXX
|
||||
SG_ LDW_Direction : 14|1@0+ (1,0) [0|1] "" XXX
|
||||
SG_ SET_ME_X1 : 18|1@0+ (1,0) [0|1] "" XXX
|
||||
SG_ Kombi_Lamp_Orange : 19|1@0+ (1,0) [0|1] "" XXX
|
||||
SG_ Kombi_Lamp_Green : 20|1@0+ (1,0) [0|1] "" XXX
|
||||
SG_ XX_LDW_Maybe_Warning : 16|1@0+ (1,0) [0|1] "" XXX
|
||||
SG_ XX_DLCORTLC1 : 24|8@1+ (1,0) [0|255] "" XXX
|
||||
SG_ XX_DLCORTLC2 : 32|8@1+ (1,0) [0|255] "" XXX
|
||||
|
||||
BO_ 428 Bremse_8: 8 XXX
|
||||
SG_ BR8_Checksumme : 0|8@1+ (1,0) [0|255] "" XXX
|
||||
SG_ BR8_Zaehler : 8|4@1+ (1,0) [0|15] "" XXX
|
||||
SG_ BR8_Sta_ACC_Anf : 12|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ BR8_Verz_EPB_akt : 13|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ BR8_Sta_Br_temp : 14|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ BR8_Sta_Br_Druck : 15|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ BR8_TolAbgl_HL : 16|8@1+ (0.048828125,-6.201171875) [-6.201171875|6.15234375] "Unit_PerCent" XXX
|
||||
SG_ BR8_TolAbgl_HR : 24|8@1+ (0.048828125,-6.201171875) [-6.201171875|6.15234375] "Unit_PerCent" XXX
|
||||
SG_ BR8_Istbeschl : 32|9@1+ (0.02,-7.22) [-7.22|2.98] "Unit_MeterPerSeconSquar" XXX
|
||||
SG_ BR8_Sta_HW_BLS : 41|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ BR8_QB_LBeschl : 42|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ BR8_ESC_Mode : 43|2@1+ (1,0) [0|3] "" XXX
|
||||
SG_ BR8_aktBrSyst : 45|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ BR8_Fa_bremst : 46|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ BR8_StaBrSyst : 47|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ BR8_Laengsbeschl : 48|10@1+ (0.03125,-16) [-15.96875|15.9375] "Unit_MeterPerSeconSquar" XXX
|
||||
SG_ BR8_Sta_ADR_BR : 58|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ BR8_Quattro : 59|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ BR8_Sta_VerzReg : 60|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ BR8_Sta_BLS : 61|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ BR8_Verz_EPB : 62|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ BR8_Check_EPB : 63|1@1+ (1,0) [0|1] "" XXX
|
||||
|
||||
BO_ 928 Bremse_10: 8 XXX
|
||||
SG_ B10_Checksumme : 0|8@1+ (1,0) [0|255] "" XXX
|
||||
SG_ B10_Zaehler : 8|4@1+ (1,0) [0|15] "" XXX
|
||||
SG_ B10_QB_Wegimp_VL : 12|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ B10_QB_Wegimp_VR : 13|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ B10_QB_Wegimp_HL : 14|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ B10_QB_Wegimp_HR : 15|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ B10_Wegimp_VL : 16|10@1+ (1,0) [0|1000] "" XXX
|
||||
SG_ B10_Wegimp_VR : 26|10@1+ (1,0) [0|1000] "" XXX
|
||||
SG_ B10_Wegimp_HL : 36|10@1+ (1,0) [0|1000] "" XXX
|
||||
SG_ B10_Wegimp_HR : 46|10@1+ (1,0) [0|1000] "" XXX
|
||||
SG_ B10_QB_Fahrtr_VL : 56|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ B10_QB_Fahrtr_VR : 57|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ B10_QB_Fahrtr_HL : 58|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ B10_QB_Fahrtr_HR : 59|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ B10_Fahrtr_VL : 60|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ B10_Fahrtr_VR : 61|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ B10_Fahrtr_HL : 62|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ B10_Fahrtr_HR : 63|1@1+ (1,0) [0|1] "" XXX
|
||||
|
||||
BO_ 835 RDK_Status: 3 XXX
|
||||
SG_ RKS_Reifen_VL : 0|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ RKS_Reifen_VR : 1|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ RKS_Reifen_HL : 2|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ RKS_Reifen_HR : 3|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ RKS_Reifen_RR : 4|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ RKS_Warnung_2 : 5|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ RKS_Warnung_1 : 6|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ RKS_Systemfehler : 7|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ RKS_Kalibrier_abgew : 8|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ RKS_Druckdiff_Vorn : 9|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ RKS_Druckdiff_Hinten : 10|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ RKS_Befuellung_RR_low : 11|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ RKS_Funkstoerung : 12|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ RKS_System_Aus : 13|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ RKS_KD_Fehler : 15|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ RKS_Lampe : 16|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ RKS_Ton : 17|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ RKS_Gong : 18|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ RKS_RDK_Blinkbit : 19|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ RKS_Teillast : 20|1@1+ (1,0) [0|1] "" XXX
|
||||
|
||||
BO_ 914 Gate_Komf_2: 8 XXX
|
||||
SG_ GK2_Sta_LSM : 0|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ GK2_Sta_Lichtsensor : 1|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ GK2_Sta_Licht1 : 2|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ GK2_Sta_VSG : 3|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ GK2_Sta_Schluessel : 4|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ GK2_Sta_Profil : 5|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ GK2_Sta_Clima2 : 6|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ GK2_Sta_BSG4 : 7|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ GK2_Sta_Kessy_4 : 8|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ BS4_Gleitende_Leuchtw_Anf : 9|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ BS4_GLW_Fernlicht_Anf : 10|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ GK2_Blk_L_Kontrolle : 11|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ GK2_Blk_R_Kontrolle : 12|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ GK2_LS_KomFehler : 14|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ GK2_LS_def : 15|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ GK2_Helligkeit : 16|3@1+ (714.286,0) [0|5000.002] "Unit_Lux" XXX
|
||||
SG_ GK2_VD_zu_ver : 19|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ GK2_VD_entriegelt : 20|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ GK2_VD_offen_ver : 21|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ GK2_Verdeck_Anf : 22|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ GK2_VDKD_auf : 23|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ GK2_Schluessel : 24|4@1+ (1,0) [0|15] "" XXX
|
||||
SG_ GK2_Hardtop : 28|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ GK2_AFL_Schalter : 29|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ GK2_Nebelschluss : 30|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ GK2_EM_LIN_ungueltig : 31|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ GK2_Profil : 32|4@1+ (1,0) [0|15] "" XXX
|
||||
SG_ GK2_Kl_StSt_Info : 36|2@1+ (1,0) [0|3] "" XXX
|
||||
SG_ GK2_BSG_StSt_Info : 38|2@1+ (1,0) [0|3] "" XXX
|
||||
SG_ GK2_BEM_P_Generator : 40|8@1+ (50,0) [0|12700] "Unit_Watt" XXX
|
||||
SG_ GK2_BEM_Abschaltstufen : 48|3@1+ (1,0) [0|7] "" XXX
|
||||
SG_ GK2_BEM_DFM : 51|5@1+ (3.225,0.025) [0.025|100] "Unit_PerCent" XXX
|
||||
SG_ GK2_Kessy_StSt_Info : 56|2@1+ (1,0) [0|3] "" XXX
|
||||
SG_ GK2_BEM_StSt_Info : 58|2@1+ (1,0) [0|3] "" XXX
|
||||
|
||||
BO_ 1175 Parkhilfe_01: 8 XXX
|
||||
SG_ PH_Abschaltursache : 13|3@1+ (1,0) [0|7] "" XXX
|
||||
SG_ PH_Opt_Anzeige_V_ein : 16|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ PH_Opt_Anzeige_H_ein : 17|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ PH_Opt_Anz_V_Hindernis : 18|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ PH_Opt_Anz_H_Hindernis : 19|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ PH_Tongeber_V_aktiv : 20|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ PH_Tongeber_H_aktiv : 21|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ PH_Tongeber_mute : 22|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ PH_Anf_Audioabsenkung : 23|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ PH_Frequenz_hinten : 32|4@1+ (1,0) [0|15] "" XXX
|
||||
SG_ PH_Lautstaerke_hinten : 36|4@1+ (1,0) [0|15] "" XXX
|
||||
SG_ PH_Frequenz_vorn : 40|4@1+ (1,0) [0|15] "" XXX
|
||||
SG_ PH_Lautstaerke_vorn : 44|4@1+ (1,0) [0|15] "" XXX
|
||||
SG_ PH_Trigger_Bildaufschaltung : 48|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ PH_StartStopp_Info : 49|2@1+ (1,0) [0|3] "" XXX
|
||||
SG_ PH_Aufbauten_erk : 51|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ PH_BerErk_vorn : 52|2@1+ (1,0) [0|3] "" XXX
|
||||
SG_ PH_BerErk_hinten : 54|2@1+ (1,0) [0|3] "" XXX
|
||||
SG_ PH_defekt : 56|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ PH_gestoert : 57|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ PH_Systemzustand : 58|3@1+ (1,0) [0|7] "" XXX
|
||||
SG_ PH_Display_Kundenwunsch : 61|2@1+ (1,0) [0|3] "" XXX
|
||||
SG_ PH_KD_Fehler : 63|1@1+ (1,0) [0|1] "" XXX
|
||||
|
||||
BO_ 1463 Bremse_11: 8 XXX
|
||||
SG_ B11_HydHalten : 13|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ B11_Br_StSt_Info : 14|2@1+ (1,0) [0|3] "" XXX
|
||||
SG_ B11_OBD_Nib_VL : 16|4@1+ (1,0) [0|15] "" XXX
|
||||
SG_ B11_OBD_Nib_VR : 20|4@1+ (1,0) [0|15] "" XXX
|
||||
SG_ B11_OBD_Nib_HL : 24|4@1+ (1,0) [0|15] "" XXX
|
||||
SG_ B11_OBD_Nib_HR : 28|4@1+ (1,0) [0|15] "" XXX
|
||||
SG_ B11_EPB_Steller_akt : 32|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ B11_EPB_Steller_gue : 33|1@1+ (1,0) [0|1] "" XXX
|
||||
|
||||
BO_ 1500 Soll_Verbauliste_neu: 8 XXX
|
||||
SG_ VL1_Motor_SG : 0|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ VL1_Getr_SG : 1|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ VL1_ABS : 2|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ VL1_Kombi : 3|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ VL1_LSM : 4|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ VL1_Airbag : 5|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ VL1_Lenkhilfe : 6|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ VL1_dyn_LWR : 7|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ VL1_res_08 : 8|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ VL1_Allrad : 9|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ VL1_ADR : 10|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ VL1_ADR_getrennt : 11|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ VL1_EPB : 12|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ VL1_res_13 : 13|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ VL1_Daempfer : 14|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ VL1_Quersperre : 15|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ VL1_MotorSlave : 16|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ VL1_SWA : 17|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ VL1_HCA : 18|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ VL1_RKA_Plus : 19|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ VL1_PLA : 20|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ VL1_WFS_KBI : 21|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ VL1_Kombi_KBI : 22|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ VL1_Soll_eq_Ist : 23|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ VL1_BSG_Komf : 24|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ VL1_ZKE : 25|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ VL1_TSG_FT : 26|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ VL1_TSG_BT : 27|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ VL1_TSG_HL : 28|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ VL1_TSG_HR : 29|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ VL1_Memory : 30|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ VL1_Dachmodul_K : 31|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ VL1_Zentralelektrik_II : 32|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ VL1_RDK : 33|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ VL1_Lenksaeule : 34|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ VL1_Gateway : 35|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ VL1_Clima_Komf : 36|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ VL1_Einparkhilfe : 37|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ VL1_PTC_Heizung : 38|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ VL1_Standheiz : 39|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ VL1_Verdeck : 40|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ VL1_RSE_I : 41|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ VL1_res_42 : 42|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ VL1_MDI_I : 43|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ VL1_Anhaenger : 44|1@1+ (1,0) [0|1] "" SWA
|
||||
SG_ VL1_Memory_BF : 45|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ VL1_Easy_Entry_VF : 46|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ VL1_Easy_Entry_VB : 47|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ VL1_Heckdeckel : 48|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ VL1_Rearview : 49|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ VL1_Sonderfzg_SG : 50|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ VL1_Tastenmodul : 51|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ VL1_Kompass : 52|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ VL1_WFS_K : 53|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ VL1_GSM_Pager : 54|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ VL1_InfoElektronik : 55|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ VL1_DSP : 56|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ VL1_DAB : 57|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ VL1_Telematik : 58|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ VL1_Navigation : 59|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ VL1_TV_Tuner : 60|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ VL1_Neigungsmodul_I : 61|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ VL1_Radio : 62|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ VL1_Telefon : 63|1@1+ (1,0) [0|1] "" XXX
|
||||
|
||||
BO_ 1490 Ident: 8 XXX
|
||||
SG_ IDT_Mux M : 0|2@1+ (1,0) [0|2] "" XXX
|
||||
SG_ IDT_Geheimnis_1 m0 : 8|8@1+ (1,0) [0|255] "" XXX
|
||||
SG_ IDT_VIN_4 m1 : 8|8@1+ (1,0) [0|255] "" XXX
|
||||
SG_ IDT_VIN_11 m2 : 8|8@1+ (1,0) [0|255] "" XXX
|
||||
SG_ IDT_Geheimnis_2 m0 : 16|8@1+ (1,0) [0|255] "" XXX
|
||||
SG_ IDT_VIN_5 m1 : 16|8@1+ (1,0) [0|255] "" XXX
|
||||
SG_ IDT_VIN_12 m2 : 16|8@1+ (1,0) [0|255] "" XXX
|
||||
SG_ IDT_Geheimnis_3 m0 : 24|8@1+ (1,0) [0|255] "" XXX
|
||||
SG_ IDT_VIN_6 m1 : 24|8@1+ (1,0) [0|255] "" XXX
|
||||
SG_ IDT_VIN_13 m2 : 24|8@1+ (1,0) [0|255] "" XXX
|
||||
SG_ IDT_Geheimnis_4 m0 : 32|8@1+ (1,0) [0|255] "" XXX
|
||||
SG_ IDT_VIN_7 m1 : 32|8@1+ (1,0) [0|255] "" XXX
|
||||
SG_ IDT_VIN_14 m2 : 32|8@1+ (1,0) [0|255] "" XXX
|
||||
SG_ IDT_VIN_1 m0 : 40|8@1+ (1,0) [0|255] "" XXX
|
||||
SG_ IDT_VIN_8 m1 : 40|8@1+ (1,0) [0|255] "" XXX
|
||||
SG_ IDT_VIN_15 m2 : 40|8@1+ (1,0) [0|255] "" XXX
|
||||
SG_ IDT_VIN_2 m0 : 48|8@1+ (1,0) [0|255] "" XXX
|
||||
SG_ IDT_VIN_9 m1 : 48|8@1+ (1,0) [0|255] "" XXX
|
||||
SG_ IDT_VIN_16 m2 : 48|8@1+ (1,0) [0|255] "" XXX
|
||||
SG_ IDT_VIN_3 m0 : 56|8@1+ (1,0) [0|255] "" XXX
|
||||
SG_ IDT_VIN_10 m1 : 56|8@1+ (1,0) [0|255] "" XXX
|
||||
SG_ IDT_VIN_17 m2 : 56|8@1+ (1,0) [0|255] "" XXX
|
||||
|
||||
BO_ 2000 Diagnose_1: 8 XXX
|
||||
SG_ DI1_VerlernZaehl : 0|8@1+ (1,0) [0|254] "" XXX
|
||||
SG_ DI1_km_Stand : 8|20@1+ (1,0) [0|1048575] "Unit_KiloMeter" XXX
|
||||
SG_ DI1_Jahr : 28|7@1+ (1,2000) [2000|2127] "Unit_Year" XXX
|
||||
SG_ DI1_Monat : 35|4@1+ (1,0) [1|12] "Unit_Month" XXX
|
||||
SG_ DI1_Tag : 39|5@1+ (1,0) [0|31] "Unit_Day" XXX
|
||||
SG_ DI1_Stunde : 44|5@1+ (1,0) [0|23] "Unit_Hours" XXX
|
||||
SG_ DI1_Minute : 49|6@1+ (1,0) [0|59] "Unit_Minut" XXX
|
||||
SG_ DI1_Sekunde : 55|6@1+ (1,0) [0|59] "Unit_Secon" XXX
|
||||
SG_ DI1_KM_Stand_alt : 62|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ DI1_Zeit_alt : 63|1@1+ (1,0) [0|1] "" XXX
|
||||
|
||||
CM_ SG_ 210 LM_Offset "centiNewton-meters for ease of calculation without FP math in Panda";
|
||||
CM_ SG_ 210 Vib_Amp "Steering wheel haptic, amplitude";
|
||||
CM_ SG_ 210 Vib_Freq "Steering wheel haptic, frequency";
|
||||
CM_ SG_ 1386 ACA_V_Wunsch "255=unset";
|
||||
CM_ SG_ 1470 LDW_Direction "0=right,1=left";
|
||||
CM_ SG_ 1470 XX_DLCORTLC1 "Might be DLC or TLC";
|
||||
CM_ SG_ 1470 XX_DLCORTLC2 "Might be DLC or TLC, might have wrong size";
|
||||
CM_ SG_ 1550 MFA_v_Signal_02 "0=km/h, 1=mph";
|
||||
|
||||
VAL_ 1088 Waehlhebelposition__Getriebe_1_ 8 "P" 7 "R" 6 "N" 5 "D" 9 "U";
|
||||
|
||||
@@ -64,7 +64,7 @@ bool fake_send = false;
|
||||
bool loopback_can = false;
|
||||
cereal::HealthData::HwType hw_type = cereal::HealthData::HwType::UNKNOWN;
|
||||
bool is_pigeon = false;
|
||||
const uint32_t NO_IGNITION_CNT_MAX = 2 * 60 * 60 * 30; // turn off charge after 30 hrs
|
||||
const uint32_t NO_IGNITION_CNT_MAX = 2 * 60 * 60 * 3; // turn off charge after 3 hrs
|
||||
const float VBATT_START_CHARGING = 11.5;
|
||||
const float VBATT_PAUSE_CHARGING = 11.0;
|
||||
float voltage_f = 12.5; // filtered voltage
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
from cereal import car
|
||||
from selfdrive.car import apply_std_steer_torque_limits
|
||||
from selfdrive.car.volkswagen import volkswagencan
|
||||
from selfdrive.car.volkswagen.values import DBC, CANBUS, MQB_LDW_MESSAGES, BUTTON_STATES, CarControllerParams
|
||||
from selfdrive.car.volkswagen.values import DBC, CANBUS, NWL, MQB_LDW_MESSAGES, BUTTON_STATES, CarControllerParams
|
||||
from opendbc.can.packer import CANPacker
|
||||
|
||||
VisualAlert = car.CarControl.HUDControl.VisualAlert
|
||||
@@ -12,6 +12,16 @@ class CarController():
|
||||
self.apply_steer_last = 0
|
||||
|
||||
self.packer_pt = CANPacker(DBC[CP.carFingerprint]['pt'])
|
||||
self.acc_bus = CANBUS.pt if CP.networkLocation == NWL.fwdCamera else CANBUS.cam
|
||||
|
||||
if CP.safetyModel == car.CarParams.SafetyModel.volkswagen:
|
||||
self.create_steering_control = volkswagencan.create_mqb_steering_control
|
||||
self.create_acc_buttons_control = volkswagencan.create_mqb_acc_buttons_control
|
||||
self.create_hud_control = volkswagencan.create_mqb_hud_control
|
||||
elif CP.safetyModel == car.CarParams.SafetyModel.volkswagenPq:
|
||||
self.create_steering_control = volkswagencan.create_pq_steering_control
|
||||
self.create_acc_buttons_control = volkswagencan.create_pq_acc_buttons_control
|
||||
self.create_hud_control = volkswagencan.create_pq_hud_control
|
||||
|
||||
self.hcaSameTorqueCount = 0
|
||||
self.hcaEnabledFrameCount = 0
|
||||
@@ -98,7 +108,7 @@ class CarController():
|
||||
|
||||
self.apply_steer_last = apply_steer
|
||||
idx = (frame / P.HCA_STEP) % 16
|
||||
can_sends.append(volkswagencan.create_mqb_steering_control(self.packer_pt, CANBUS.pt, apply_steer,
|
||||
can_sends.append(self.create_steering_control(self.packer_pt, CANBUS.pt, apply_steer,
|
||||
idx, hcaEnabled))
|
||||
|
||||
#--------------------------------------------------------------------------
|
||||
@@ -119,7 +129,7 @@ class CarController():
|
||||
else:
|
||||
hud_alert = MQB_LDW_MESSAGES["none"]
|
||||
|
||||
can_sends.append(volkswagencan.create_mqb_hud_control(self.packer_pt, CANBUS.pt, hcaEnabled,
|
||||
can_sends.append(self.create_hud_control(self.packer_pt, CANBUS.pt, hcaEnabled,
|
||||
CS.out.steeringPressed, hud_alert, leftLaneVisible,
|
||||
rightLaneVisible))
|
||||
|
||||
@@ -178,7 +188,7 @@ class CarController():
|
||||
if self.graMsgSentCount == 0:
|
||||
self.graMsgStartFramePrev = frame
|
||||
idx = (CS.graMsgBusCounter + 1) % 16
|
||||
can_sends.append(volkswagencan.create_mqb_acc_buttons_control(self.packer_pt, CANBUS.pt, self.graButtonStatesToSend, CS, idx))
|
||||
can_sends.append(self.create_acc_buttons_control(self.packer_pt, self.acc_bus, self.graButtonStatesToSend, CS, idx))
|
||||
self.graMsgSentCount += 1
|
||||
if self.graMsgSentCount >= P.GRA_VBP_COUNT:
|
||||
self.graButtonStatesToSend = None
|
||||
|
||||
@@ -4,16 +4,34 @@ from selfdrive.config import Conversions as CV
|
||||
from selfdrive.car.interfaces import CarStateBase
|
||||
from opendbc.can.parser import CANParser
|
||||
from opendbc.can.can_define import CANDefine
|
||||
from selfdrive.car.volkswagen.values import DBC, CANBUS, BUTTON_STATES, CarControllerParams
|
||||
from selfdrive.car.volkswagen.values import DBC, CANBUS, NWL, TRANS, GEAR, BUTTON_STATES, CarControllerParams
|
||||
|
||||
|
||||
class CarState(CarStateBase):
|
||||
def __init__(self, CP):
|
||||
super().__init__(CP)
|
||||
can_define = CANDefine(DBC[CP.carFingerprint]['pt'])
|
||||
self.shifter_values = can_define.dv["Getriebe_11"]['GE_Fahrstufe']
|
||||
|
||||
if CP.safetyModel == car.CarParams.SafetyModel.volkswagenPq:
|
||||
# Configure for PQ35/PQ46/NMS network messaging
|
||||
self.get_can_parser = self.get_pq_can_parser
|
||||
self.get_cam_can_parser = self.get_pq_cam_can_parser
|
||||
self.update = self.update_pq
|
||||
if CP.transmissionType == TRANS.automatic:
|
||||
self.shifter_values = can_define.dv["Getriebe_1"]['Waehlhebelposition__Getriebe_1_']
|
||||
else:
|
||||
# Configure for MQB network messaging (default)
|
||||
self.get_can_parser = self.get_mqb_can_parser
|
||||
self.get_cam_can_parser = self.get_mqb_cam_can_parser
|
||||
self.update = self.update_mqb
|
||||
if CP.transmissionType == TRANS.automatic:
|
||||
self.shifter_values = can_define.dv["Getriebe_11"]['GE_Fahrstufe']
|
||||
elif CP.transmissionType == TRANS.direct:
|
||||
self.shifter_values = can_define.dv["EV_Gearshift"]['GearPosition']
|
||||
|
||||
self.buttonStates = BUTTON_STATES.copy()
|
||||
|
||||
def update(self, pt_cp):
|
||||
def update_mqb(self, pt_cp, cam_cp, acc_cp, trans_type):
|
||||
ret = car.CarState.new_message()
|
||||
# Update vehicle speed and acceleration from ABS wheel speeds.
|
||||
ret.wheelSpeeds.fl = pt_cp.vl["ESP_19"]['ESP_VL_Radgeschw_02'] * CV.KPH_TO_MS
|
||||
@@ -28,22 +46,43 @@ class CarState(CarStateBase):
|
||||
|
||||
# Update steering angle, rate, yaw rate, and driver input torque. VW send
|
||||
# the sign/direction in a separate signal so they must be recombined.
|
||||
ret.steeringAngle = pt_cp.vl["LWI_01"]['LWI_Lenkradwinkel'] * (1,-1)[int(pt_cp.vl["LWI_01"]['LWI_VZ_Lenkradwinkel'])]
|
||||
ret.steeringRate = pt_cp.vl["LWI_01"]['LWI_Lenkradw_Geschw'] * (1,-1)[int(pt_cp.vl["LWI_01"]['LWI_VZ_Lenkradwinkel'])]
|
||||
ret.steeringTorque = pt_cp.vl["EPS_01"]['Driver_Strain'] * (1,-1)[int(pt_cp.vl["EPS_01"]['Driver_Strain_VZ'])]
|
||||
ret.steeringAngle = pt_cp.vl["LWI_01"]['LWI_Lenkradwinkel'] * (1, -1)[int(pt_cp.vl["LWI_01"]['LWI_VZ_Lenkradwinkel'])]
|
||||
ret.steeringRate = pt_cp.vl["LWI_01"]['LWI_Lenkradw_Geschw'] * (1, -1)[int(pt_cp.vl["LWI_01"]['LWI_VZ_Lenkradwinkel'])]
|
||||
ret.steeringTorque = pt_cp.vl["EPS_01"]['Driver_Strain'] * (1, -1)[int(pt_cp.vl["EPS_01"]['Driver_Strain_VZ'])]
|
||||
ret.steeringPressed = abs(ret.steeringTorque) > CarControllerParams.STEER_DRIVER_ALLOWANCE
|
||||
ret.yawRate = pt_cp.vl["ESP_02"]['ESP_Gierrate'] * (1,-1)[int(pt_cp.vl["ESP_02"]['ESP_VZ_Gierrate'])] * CV.DEG_TO_RAD
|
||||
ret.yawRate = pt_cp.vl["ESP_02"]['ESP_Gierrate'] * (1, -1)[int(pt_cp.vl["ESP_02"]['ESP_VZ_Gierrate'])] * CV.DEG_TO_RAD
|
||||
|
||||
# Update gas, brakes, and gearshift.
|
||||
ret.gas = pt_cp.vl["Motor_20"]['MO_Fahrpedalrohwert_01'] / 100.0
|
||||
ret.gasPressed = ret.gas > 0
|
||||
ret.brake = pt_cp.vl["ESP_05"]['ESP_Bremsdruck'] / 250.0 # FIXME: this is pressure in Bar, not sure what OP expects
|
||||
ret.brake = pt_cp.vl["ESP_05"]['ESP_Bremsdruck'] / 250.0 # FIXME: this is pressure in Bar, not sure what OP expects
|
||||
ret.brakePressed = bool(pt_cp.vl["ESP_05"]['ESP_Fahrer_bremst'])
|
||||
ret.brakeLights = bool(pt_cp.vl["ESP_05"]['ESP_Status_Bremsdruck'])
|
||||
|
||||
# Additional safety checks performed in CarInterface.
|
||||
self.parkingBrakeSet = bool(pt_cp.vl["Kombi_01"]['KBI_Handbremse']) # FIXME: need to include an EPB check as well
|
||||
ret.espDisabled = pt_cp.vl["ESP_21"]['ESP_Tastung_passiv'] != 0
|
||||
|
||||
# Update gear and/or clutch position data.
|
||||
can_gear_shifter = int(pt_cp.vl["Getriebe_11"]['GE_Fahrstufe'])
|
||||
ret.gearShifter = self.parse_gear_shifter(self.shifter_values.get(can_gear_shifter, None))
|
||||
if trans_type == TRANS.automatic:
|
||||
ret.gearShifter = self.parse_gear_shifter(self.shifter_values.get(pt_cp.vl["Getriebe_11"]['GE_Fahrstufe'], None))
|
||||
elif trans_type == TRANS.direct:
|
||||
ret.gearShifter = self.parse_gear_shifter(self.shifter_values.get(pt_cp.vl["EV_Gearshift"]['GearPosition'], None))
|
||||
elif trans_type == TRANS.manual:
|
||||
ret.clutchPressed = not pt_cp.vl["Motor_14"]['MO_Kuppl_schalter']
|
||||
reverse_light = bool(pt_cp.vl["Gateway_72"]['BCM1_Rueckfahrlicht_Schalter'])
|
||||
# TODO: verify this synthesis has the desired behavior.
|
||||
# In particular, should we neutral disengage during normal gear changes?
|
||||
# Also, what happens if we're rolling backwards with the clutch pressed
|
||||
# in a gear other than reverse?
|
||||
if reverse_light:
|
||||
ret.gearShifter = GEAR.reverse
|
||||
elif ret.standstill and self.parkingBrakeSet:
|
||||
ret.gearShifter = GEAR.park
|
||||
elif ret.clutchPressed:
|
||||
ret.gearShifter = GEAR.neutral
|
||||
else:
|
||||
ret.gearShifter = GEAR.drive
|
||||
|
||||
# Update door and trunk/hatch lid open status.
|
||||
ret.doorOpen = any([pt_cp.vl["Gateway_72"]['ZV_FT_offen'],
|
||||
@@ -77,7 +116,7 @@ class CarState(CarStateBase):
|
||||
|
||||
# Update ACC setpoint. When the setpoint is zero or there's an error, the
|
||||
# radar sends a set-speed of ~90.69 m/s / 203mph.
|
||||
ret.cruiseState.speed = pt_cp.vl["ACC_02"]['SetSpeed']
|
||||
ret.cruiseState.speed = acc_cp.vl["ACC_02"]['SetSpeed']
|
||||
if ret.cruiseState.speed > 90:
|
||||
ret.cruiseState.speed = 0
|
||||
|
||||
@@ -98,6 +137,7 @@ class CarState(CarStateBase):
|
||||
self.graTypHauptschalter = pt_cp.vl["GRA_ACC_01"]['GRA_Typ_Hauptschalter']
|
||||
self.graButtonTypeInfo = pt_cp.vl["GRA_ACC_01"]['GRA_ButtonTypeInfo']
|
||||
self.graTipStufe2 = pt_cp.vl["GRA_ACC_01"]['GRA_Tip_Stufe_2']
|
||||
self.graTyp468 = pt_cp.vl["GRA_ACC_01"]['GRA_Typ468']
|
||||
# Pick up the GRA_ACC_01 CAN message counter so we can sync to it for
|
||||
# later cruise-control button spamming.
|
||||
self.graMsgBusCounter = pt_cp.vl["GRA_ACC_01"]['COUNTER']
|
||||
@@ -106,15 +146,113 @@ class CarState(CarStateBase):
|
||||
# accept and respond to HCA_01 messages and has not encountered a fault.
|
||||
self.steeringFault = not pt_cp.vl["EPS_01"]["HCA_Ready"]
|
||||
|
||||
return ret
|
||||
|
||||
def update_pq(self, pt_cp, cam_cp, acc_cp, trans_type):
|
||||
ret = car.CarState.new_message()
|
||||
# Update vehicle speed and acceleration from ABS wheel speeds.
|
||||
ret.wheelSpeeds.fl = pt_cp.vl["Bremse_3"]['Radgeschw__VL_4_1'] * CV.KPH_TO_MS
|
||||
ret.wheelSpeeds.fr = pt_cp.vl["Bremse_3"]['Radgeschw__VR_4_1'] * CV.KPH_TO_MS
|
||||
ret.wheelSpeeds.rl = pt_cp.vl["Bremse_3"]['Radgeschw__HL_4_1'] * CV.KPH_TO_MS
|
||||
ret.wheelSpeeds.rr = pt_cp.vl["Bremse_3"]['Radgeschw__HR_4_1'] * CV.KPH_TO_MS
|
||||
|
||||
ret.vEgoRaw = float(np.mean([ret.wheelSpeeds.fl, ret.wheelSpeeds.fr, ret.wheelSpeeds.rl, ret.wheelSpeeds.rr]))
|
||||
ret.vEgo, ret.aEgo = self.update_speed_kf(ret.vEgoRaw)
|
||||
|
||||
ret.standstill = ret.vEgoRaw < 0.1
|
||||
|
||||
# Update steering angle, rate, yaw rate, and driver input torque. VW send
|
||||
# the sign/direction in a separate signal so they must be recombined.
|
||||
ret.steeringAngle = pt_cp.vl["Lenkhilfe_3"]['LH3_BLW'] * (1, -1)[int(pt_cp.vl["Lenkhilfe_3"]['LH3_BLWSign'])]
|
||||
ret.steeringRate = pt_cp.vl["Lenkwinkel_1"]['Lenkradwinkel_Geschwindigkeit'] * (1, -1)[int(pt_cp.vl["Lenkwinkel_1"]['Lenkradwinkel_Geschwindigkeit_S'])]
|
||||
ret.steeringTorque = pt_cp.vl["Lenkhilfe_3"]['LH3_LM'] * (1, -1)[int(pt_cp.vl["Lenkhilfe_3"]['LH3_LMSign'])]
|
||||
ret.steeringPressed = abs(ret.steeringTorque) > CarControllerParams.STEER_DRIVER_ALLOWANCE
|
||||
ret.yawRate = pt_cp.vl["Bremse_5"]['Giergeschwindigkeit'] * (1, -1)[int(pt_cp.vl["Bremse_5"]['Vorzeichen_der_Giergeschwindigk'])] * CV.DEG_TO_RAD
|
||||
|
||||
# Update gas, brakes, and gearshift.
|
||||
ret.gas = pt_cp.vl["Motor_3"]['Fahrpedal_Rohsignal'] / 100.0
|
||||
ret.gasPressed = ret.gas > 0
|
||||
ret.brake = pt_cp.vl["Bremse_5"]['Bremsdruck'] / 250.0 # FIXME: this is pressure in Bar, not sure what OP expects
|
||||
ret.brakePressed = bool(pt_cp.vl["Motor_2"]['Bremstestschalter'])
|
||||
ret.brakeLights = bool(pt_cp.vl["Motor_2"]['Bremslichtschalter'])
|
||||
|
||||
# Additional safety checks performed in CarInterface.
|
||||
self.parkingBrakeSet = bool(pt_cp.vl["Kombi_01"]['KBI_Handbremse']) # FIXME: need to include an EPB check as well
|
||||
ret.espDisabled = pt_cp.vl["ESP_21"]['ESP_Tastung_passiv'] != 0
|
||||
self.parkingBrakeSet = bool(pt_cp.vl["Kombi_1"]['Bremsinfo']) # FIXME: need to include an EPB check as well
|
||||
ret.espDisabled = bool(pt_cp.vl["Bremse_1"]['ESP_Passiv_getastet'])
|
||||
|
||||
# Update gear and/or clutch position data.
|
||||
if trans_type == TRANS.automatic:
|
||||
ret.gearShifter = self.parse_gear_shifter(self.shifter_values.get(pt_cp.vl["Getriebe_1"]['Waehlhebelposition__Getriebe_1_'], None))
|
||||
elif trans_type == TRANS.manual:
|
||||
ret.clutchPressed = not pt_cp.vl["Motor_1"]['Kupplungsschalter']
|
||||
reverse_light = bool(pt_cp.vl["Gate_Komf_1"]['GK1_Rueckfahr'])
|
||||
# TODO: verify this synthesis has the desired behavior.
|
||||
# In particular, should we neutral disengage during normal gear changes?
|
||||
# Also, what happens if we're rolling backwards with the clutch pressed
|
||||
# in a gear other than reverse?
|
||||
if reverse_light:
|
||||
ret.gearShifter = GEAR.reverse
|
||||
elif ret.standstill and self.parkingBrakeSet:
|
||||
ret.gearShifter = GEAR.park
|
||||
elif ret.clutchPressed:
|
||||
ret.gearShifter = GEAR.neutral
|
||||
else:
|
||||
ret.gearShifter = GEAR.drive
|
||||
|
||||
# Update door and trunk/hatch lid open status.
|
||||
# TODO: need to locate signals for other three doors if possible
|
||||
ret.doorOpen = bool(pt_cp.vl["Gate_Komf_1"]['GK1_Fa_Tuerkont'])
|
||||
|
||||
# Update seatbelt fastened status.
|
||||
ret.seatbeltUnlatched = not bool(pt_cp.vl["Airbag_1"]["Gurtschalter_Fahrer"])
|
||||
|
||||
# Update driver preference for metric. VW stores many different unit
|
||||
# preferences, including separate units for for distance vs. speed.
|
||||
# We use the speed preference for OP.
|
||||
self.displayMetricUnits = not pt_cp.vl["Einheiten_1"]["MFA_v_Einheit_02"]
|
||||
|
||||
# Update ACC radar status.
|
||||
# FIXME: This is unfinished and not fully correct, need to improve further
|
||||
ret.cruiseState.available = bool(pt_cp.vl["GRA_neu"]['Hauptschalter'])
|
||||
ret.cruiseState.enabled = True if pt_cp.vl["Motor_2"]['GRA_Status'] in [1, 2] else False
|
||||
|
||||
# Update ACC setpoint. When the setpoint reads as 255, the driver has not
|
||||
# yet established an ACC setpoint, so treat it as zero.
|
||||
ret.cruiseState.speed = acc_cp.vl["ACC_GRA_Anziege"]['ACA_V_Wunsch'] * CV.KPH_TO_MS
|
||||
if ret.cruiseState.speed > 70: # 255 kph in m/s == no current setpoint
|
||||
ret.cruiseState.speed = 0
|
||||
|
||||
# Update control button states for turn signals and ACC controls.
|
||||
self.buttonStates["accelCruise"] = bool(pt_cp.vl["GRA_neu"]['Kurz_Tip_up']) or bool(pt_cp.vl["GRA_neu"]['Lang_Tip_up'])
|
||||
self.buttonStates["decelCruise"] = bool(pt_cp.vl["GRA_neu"]['Kurz_Tip_down']) or bool(pt_cp.vl["GRA_neu"]['Lang_Tip_down'])
|
||||
self.buttonStates["cancel"] = bool(pt_cp.vl["GRA_neu"]['Abbrechen'])
|
||||
self.buttonStates["setCruise"] = bool(pt_cp.vl["GRA_neu"]['Setzen'])
|
||||
self.buttonStates["resumeCruise"] = bool(pt_cp.vl["GRA_neu"]['Wiederaufnahme'])
|
||||
self.buttonStates["gapAdjustCruise"] = bool(pt_cp.vl["GRA_neu"]['Zeitlueckenverstellung'])
|
||||
ret.leftBlinker = bool(pt_cp.vl["Gate_Komf_1"]['GK1_Blinker_li'])
|
||||
ret.rightBlinker = bool(pt_cp.vl["Gate_Komf_1"]['GK1_Blinker_re'])
|
||||
|
||||
# Read ACC hardware button type configuration info that has to pass thru
|
||||
# to the radar. Ends up being different for steering wheel buttons vs
|
||||
# third stalk type controls.
|
||||
# TODO: Check to see what info we need to passthru and spoof on PQ
|
||||
self.graHauptschalter = pt_cp.vl["GRA_neu"]['Hauptschalter']
|
||||
self.graTypHauptschalter = False
|
||||
self.graButtonTypeInfo = False
|
||||
self.graTipStufe2 = False
|
||||
# Pick up the GRA_ACC_01 CAN message counter so we can sync to it for
|
||||
# later cruise-control button spamming.
|
||||
# FIXME: will need msg counter and checksum algo to spoof GRA_neu
|
||||
self.graMsgBusCounter = 0
|
||||
|
||||
# Check to make sure the electric power steering rack is configured to
|
||||
# accept and respond to HCA_01 messages and has not encountered a fault.
|
||||
self.steeringFault = pt_cp.vl["Lenkhilfe_2"]['LH2_Sta_HCA'] not in [3, 5]
|
||||
|
||||
return ret
|
||||
|
||||
@staticmethod
|
||||
def get_can_parser(CP):
|
||||
# this function generates lists for signal, messages and initial values
|
||||
def get_mqb_can_parser(CP):
|
||||
signals = [
|
||||
# sig_name, sig_address, default
|
||||
("LWI_Lenkradwinkel", "LWI_01", 0), # Absolute steering angle
|
||||
@@ -134,14 +272,12 @@ class CarState(CarStateBase):
|
||||
("ZV_HD_offen", "Gateway_72", 0), # Trunk or hatch open
|
||||
("BH_Blinker_li", "Gateway_72", 0), # Left turn signal on
|
||||
("BH_Blinker_re", "Gateway_72", 0), # Right turn signal on
|
||||
("GE_Fahrstufe", "Getriebe_11", 0), # Auto trans gear selector position
|
||||
("AB_Gurtschloss_FA", "Airbag_02", 0), # Seatbelt status, driver
|
||||
("AB_Gurtschloss_BF", "Airbag_02", 0), # Seatbelt status, passenger
|
||||
("ESP_Fahrer_bremst", "ESP_05", 0), # Brake pedal pressed
|
||||
("ESP_Status_Bremsdruck", "ESP_05", 0), # Brakes applied
|
||||
("ESP_Bremsdruck", "ESP_05", 0), # Brake pressure applied
|
||||
("MO_Fahrpedalrohwert_01", "Motor_20", 0), # Accelerator pedal value
|
||||
("MO_Kuppl_schalter", "Motor_14", 0), # Clutch switch
|
||||
("Driver_Strain", "EPS_01", 0), # Absolute driver torque input
|
||||
("Driver_Strain_VZ", "EPS_01", 0), # Driver torque input sign
|
||||
("HCA_Ready", "EPS_01", 0), # Steering rack HCA support configured
|
||||
@@ -149,60 +285,150 @@ class CarState(CarStateBase):
|
||||
("KBI_MFA_v_Einheit_02", "Einheiten_01", 0), # MPH vs KMH speed display
|
||||
("KBI_Handbremse", "Kombi_01", 0), # Manual handbrake applied
|
||||
("TSK_Status", "TSK_06", 0), # ACC engagement status from drivetrain coordinator
|
||||
("TSK_Fahrzeugmasse_02", "Motor_16", 0), # Estimated vehicle mass from drivetrain coordinator
|
||||
("ACC_Status_ACC", "ACC_06", 0), # ACC engagement status
|
||||
("ACC_Typ", "ACC_06", 0), # ACC type (follow to stop, stop&go)
|
||||
("SetSpeed", "ACC_02", 0), # ACC set speed
|
||||
("GRA_Hauptschalter", "GRA_ACC_01", 0), # ACC button, on/off
|
||||
("GRA_Abbrechen", "GRA_ACC_01", 0), # ACC button, cancel
|
||||
("GRA_Tip_Setzen", "GRA_ACC_01", 0), # ACC button, set
|
||||
("GRA_Tip_Hoch", "GRA_ACC_01", 0), # ACC button, increase or accel
|
||||
("GRA_Tip_Runter", "GRA_ACC_01", 0), # ACC button, decrease or decel
|
||||
("GRA_Tip_Wiederaufnahme", "GRA_ACC_01", 0), # ACC button, resume
|
||||
("GRA_Verstellung_Zeitluecke", "GRA_ACC_01", 0), # ACC button, time gap adj
|
||||
("GRA_Verstellung_Zeitluecke", "GRA_ACC_01", 0), # ACC button, time gap adj
|
||||
("GRA_Typ_Hauptschalter", "GRA_ACC_01", 0), # ACC main button type
|
||||
("GRA_Tip_Stufe_2", "GRA_ACC_01", 0), # unknown related to stalk type
|
||||
("GRA_Typ468", "GRA_ACC_01", 0), # Set/Resume button behavior as overloaded coast/accel??
|
||||
("GRA_ButtonTypeInfo", "GRA_ACC_01", 0), # unknown related to stalk type
|
||||
("COUNTER", "GRA_ACC_01", 0), # GRA_ACC_01 CAN message counter
|
||||
]
|
||||
|
||||
checks = [
|
||||
# sig_address, frequency
|
||||
("LWI_01", 100), # From J500 Steering Assist with integrated sensors
|
||||
("EPS_01", 100), # From J500 Steering Assist with integrated sensors
|
||||
("ESP_19", 100), # From J104 ABS/ESP controller
|
||||
("ESP_05", 50), # From J104 ABS/ESP controller
|
||||
("ESP_21", 50), # From J104 ABS/ESP controller
|
||||
("ACC_06", 50), # From J428 ACC radar control module
|
||||
("Motor_20", 50), # From J623 Engine control module
|
||||
("TSK_06", 50), # From J623 Engine control module
|
||||
("GRA_ACC_01", 33), # From J??? steering wheel control buttons
|
||||
("ACC_02", 17), # From J428 ACC radar control module
|
||||
("Getriebe_11", 20), # From J743 Auto transmission control module
|
||||
("Gateway_72", 10), # From J533 CAN gateway (aggregated data)
|
||||
("Motor_14", 10), # From J623 Engine control module
|
||||
("Airbag_02", 5), # From J234 Airbag control module
|
||||
("Kombi_01", 2), # From J285 Instrument cluster
|
||||
("Motor_16", 2), # From J623 Engine control module
|
||||
("Einheiten_01", 1), # From J??? not known if gateway, cluster, or BCM
|
||||
("LWI_01", 100), # From J500 Steering Assist with integrated sensors
|
||||
("EPS_01", 100), # From J500 Steering Assist with integrated sensors
|
||||
("ESP_19", 100), # From J104 ABS/ESP controller
|
||||
("ESP_05", 50), # From J104 ABS/ESP controller
|
||||
("ESP_21", 50), # From J104 ABS/ESP controller
|
||||
("Motor_20", 50), # From J623 Engine control module
|
||||
("TSK_06", 50), # From J623 Engine control module
|
||||
("GRA_ACC_01", 33), # From J??? steering wheel control buttons
|
||||
("Gateway_72", 10), # From J533 CAN gateway (aggregated data)
|
||||
("Airbag_02", 5), # From J234 Airbag control module
|
||||
("Kombi_01", 2), # From J285 Instrument cluster
|
||||
("Einheiten_01", 1), # From J??? not known if gateway, cluster, or BCM
|
||||
]
|
||||
|
||||
if CP.transmissionType == TRANS.automatic:
|
||||
signals += [("GE_Fahrstufe", "Getriebe_11", 0)] # Auto trans gear selector position
|
||||
checks += [("Getriebe_11", 20)] # From J743 Auto transmission control module
|
||||
elif CP.transmissionType == TRANS.direct:
|
||||
signals += [("GearPosition", "EV_Gearshift", 0)] # EV gear selector position
|
||||
checks += [("EV_Gearshift", 10)] # From J??? unknown EV control module
|
||||
elif CP.transmissionType == TRANS.manual:
|
||||
signals += [("MO_Kuppl_schalter", "Motor_14", 0), # Clutch switch
|
||||
("BCM1_Rueckfahrlicht_Schalter", "Gateway_72", 0)] # Reverse light from BCM
|
||||
checks += [("Motor_14", 10)] # From J623 Engine control module
|
||||
|
||||
if CP.networkLocation == NWL.fwdCamera:
|
||||
# The ACC radar is here on CANBUS.pt
|
||||
signals += [("SetSpeed", "ACC_02", 0)] # ACC set speed
|
||||
checks += [("ACC_02", 17)] # From J428 ACC radar control module
|
||||
|
||||
return CANParser(DBC[CP.carFingerprint]['pt'], signals, checks, CANBUS.pt)
|
||||
|
||||
# A single signal is monitored from the camera CAN bus, and then ignored,
|
||||
# so the presence of CAN traffic can be verified with cam_cp.valid.
|
||||
|
||||
@staticmethod
|
||||
def get_cam_can_parser(CP):
|
||||
|
||||
def get_pq_can_parser(CP):
|
||||
signals = [
|
||||
# sig_name, sig_address, default
|
||||
("Kombi_Lamp_Green", "LDW_02", 0), # Lane Assist status LED
|
||||
("LH3_BLW", "Lenkhilfe_3", 0), # Absolute steering angle
|
||||
("LH3_BLWSign", "Lenkhilfe_3", 0), # Steering angle sign
|
||||
("LH3_LM", "Lenkhilfe_3", 0), # Absolute driver torque input
|
||||
("LH3_LMSign", "Lenkhilfe_3", 0), # Driver torque input sign
|
||||
("LH2_Sta_HCA", "Lenkhilfe_2", 0), # Steering rack HCA status
|
||||
("Lenkradwinkel_Geschwindigkeit", "Lenkwinkel_1", 0), # Absolute steering rate
|
||||
("Lenkradwinkel_Geschwindigkeit_S", "Lenkwinkel_1", 0), # Steering rate sign
|
||||
("Radgeschw__VL_4_1", "Bremse_3", 0), # ABS wheel speed, front left
|
||||
("Radgeschw__VR_4_1", "Bremse_3", 0), # ABS wheel speed, front right
|
||||
("Radgeschw__HL_4_1", "Bremse_3", 0), # ABS wheel speed, rear left
|
||||
("Radgeschw__HR_4_1", "Bremse_3", 0), # ABS wheel speed, rear right
|
||||
("Giergeschwindigkeit", "Bremse_5", 0), # Absolute yaw rate
|
||||
("Vorzeichen_der_Giergeschwindigk", "Bremse_5", 0), # Yaw rate sign
|
||||
("GK1_Fa_Tuerkont", "Gate_Komf_1", 0), # Door open, driver
|
||||
# TODO: locate passenger and rear door states
|
||||
("GK1_Blinker_li", "Gate_Komf_1", 0), # Left turn signal on
|
||||
("GK1_Blinker_re", "Gate_Komf_1", 0), # Right turn signal on
|
||||
("Gurtschalter_Fahrer", "Airbag_1", 0), # Seatbelt status, driver
|
||||
("Gurtschalter_Beifahrer", "Airbag_1", 0), # Seatbelt status, passenger
|
||||
("Bremstestschalter", "Motor_2", 0), # Brake pedal pressed (brake light test switch)
|
||||
("Bremslichtschalter", "Motor_2", 0), # Brakes applied (brake light switch)
|
||||
("Bremsdruck", "Bremse_5", 0), # Brake pressure applied
|
||||
("Vorzeichen_Bremsdruck", "Bremse_5", 0), # Brake pressure applied sign (???)
|
||||
("Fahrpedal_Rohsignal", "Motor_3", 0), # Accelerator pedal value
|
||||
("ESP_Passiv_getastet", "Bremse_1", 0), # Stability control disabled
|
||||
("MFA_v_Einheit_02", "Einheiten_1", 0), # MPH vs KMH speed display
|
||||
("Bremsinfo", "Kombi_1", 0), # Manual handbrake applied
|
||||
("GRA_Status", "Motor_2", 0), # ACC engagement status
|
||||
("Hauptschalter", "GRA_neu", 0), # ACC button, on/off
|
||||
("Abbrechen", "GRA_neu", 0), # ACC button, cancel
|
||||
("Setzen", "GRA_neu", 0), # ACC button, set
|
||||
("Lang_Tip_up", "GRA_neu", 0), # ACC button, increase or accel, long press
|
||||
("Lang_Tip_down", "GRA_neu", 0), # ACC button, decrease or decel, long press
|
||||
("Kurz_Tip_up", "GRA_neu", 0), # ACC button, increase or accel, short press
|
||||
("Kurz_Tip_down", "GRA_neu", 0), # ACC button, decrease or decel, short press
|
||||
("Wiederaufnahme", "GRA_neu", 0), # ACC button, resume
|
||||
("Zeitlueckenverstellung", "GRA_neu", 0), # ACC button, time gap adj
|
||||
]
|
||||
|
||||
checks = [
|
||||
# sig_address, frequency
|
||||
("LDW_02", 10) # From R242 Driver assistance camera
|
||||
("Bremse_3", 100), # From J104 ABS/ESP controller
|
||||
("Lenkhilfe_3", 100), # From J500 Steering Assist with integrated sensors
|
||||
("Lenkwinkel_1", 100), # From J500 Steering Assist with integrated sensors
|
||||
("Motor_3", 100), # From J623 Engine control module
|
||||
("Airbag_1", 50), # From J234 Airbag control module
|
||||
("Bremse_5", 50), # From J104 ABS/ESP controller
|
||||
("GRA_neu", 50), # From J??? steering wheel control buttons
|
||||
("Kombi_1", 50), # From J285 Instrument cluster
|
||||
("Motor_2", 50), # From J623 Engine control module
|
||||
("Lenkhilfe_2", 20), # From J500 Steering Assist with integrated sensors
|
||||
("Gate_Komf_1", 10), # From J533 CAN gateway
|
||||
("Einheiten_1", 1), # From J??? cluster or gateway
|
||||
]
|
||||
|
||||
if CP.transmissionType == TRANS.automatic:
|
||||
signals += [("Waehlhebelposition__Getriebe_1_", "Getriebe_1", 0)] # Auto trans gear selector position
|
||||
checks += [("Getriebe_1", 100)] # From J743 Auto transmission control module
|
||||
elif CP.transmissionType == TRANS.manual:
|
||||
signals += [("Kupplungsschalter", "Motor_1", 0), # Clutch switch
|
||||
("GK1_Rueckfahr", "Gate_Komf_1", 0)] # Reverse light from BCM
|
||||
checks += [("Motor_1", 100)] # From J623 Engine control module
|
||||
|
||||
if CP.networkLocation == NWL.fwdCamera:
|
||||
# The ACC radar is here on CANBUS.pt
|
||||
signals += [("ACA_V_Wunsch", "ACC_GRA_Anziege", 0)] # ACC set speed
|
||||
checks += [("ACC_GRA_Anziege", 25)] # From J428 ACC radar control module
|
||||
|
||||
return CANParser(DBC[CP.carFingerprint]['pt'], signals, checks, CANBUS.pt)
|
||||
|
||||
@staticmethod
|
||||
def get_mqb_cam_can_parser(CP):
|
||||
# TODO: Need to monitor LKAS camera, if present, for TLC/DLC/warning signals for passthru to SWA
|
||||
signals = []
|
||||
checks = []
|
||||
|
||||
if CP.networkLocation == NWL.gateway:
|
||||
# The ACC radar is here on CANBUS.cam
|
||||
signals += [("SetSpeed", "ACC_02", 0)] # ACC set speed
|
||||
checks += [("ACC_02", 17)] # From J428 ACC radar control module
|
||||
|
||||
return CANParser(DBC[CP.carFingerprint]['pt'], signals, checks, CANBUS.cam)
|
||||
|
||||
@staticmethod
|
||||
def get_pq_cam_can_parser(CP):
|
||||
# TODO: Need to monitor LKAS camera, if present, for TLC/DLC/warning signals for passthru to SWA
|
||||
signals = []
|
||||
checks = []
|
||||
|
||||
if CP.networkLocation == NWL.gateway:
|
||||
# The ACC radar is here on CANBUS.cam
|
||||
signals += [("ACA_V_Wunsch", "ACC_GRA_Anziege", 0)] # ACC set speed
|
||||
checks += [("ACC_GRA_Anziege", 25)] # From J428 ACC radar control module
|
||||
|
||||
return CANParser(DBC[CP.carFingerprint]['pt'], signals, checks, CANBUS.cam)
|
||||
|
||||
@@ -1,20 +1,25 @@
|
||||
from cereal import car
|
||||
from selfdrive.config import Conversions as CV
|
||||
from selfdrive.swaglog import cloudlog
|
||||
from selfdrive.controls.lib.drive_helpers import create_event, EventTypes as ET
|
||||
from selfdrive.car.volkswagen.values import CAR, BUTTON_STATES
|
||||
from common.params import put_nonblocking
|
||||
from selfdrive.car.volkswagen.values import CAR, BUTTON_STATES, NWL, TRANS, GEAR, MQB_CARS, PQ_CARS
|
||||
from common.params import Params
|
||||
from selfdrive.car import STD_CARGO_KG, scale_rot_inertia, scale_tire_stiffness, gen_empty_fingerprint
|
||||
from selfdrive.car.interfaces import CarInterfaceBase
|
||||
|
||||
GEAR = car.CarState.GearShifter
|
||||
|
||||
class CarInterface(CarInterfaceBase):
|
||||
def __init__(self, CP, CarController, CarState):
|
||||
super().__init__(CP, CarController, CarState)
|
||||
|
||||
self.displayMetricUnitsPrev = None
|
||||
self.gas_pressed_prev = False
|
||||
self.brake_pressed_prev = False
|
||||
self.cruise_enabled_prev = False
|
||||
self.low_speed_alert = False
|
||||
self.buttonStatesPrev = BUTTON_STATES.copy()
|
||||
|
||||
# Set up an alias to PT/CAM parser for ACC depending on its detected network location
|
||||
self.cp_acc = self.cp if CP.networkLocation == NWL.fwdCamera else self.cp_cam
|
||||
|
||||
@staticmethod
|
||||
def compute_gb(accel, speed):
|
||||
return float(accel) / 4.0
|
||||
@@ -23,46 +28,67 @@ class CarInterface(CarInterfaceBase):
|
||||
def get_params(candidate, fingerprint=gen_empty_fingerprint(), has_relay=False, car_fw=[]):
|
||||
ret = CarInterfaceBase.get_std_params(candidate, fingerprint, has_relay)
|
||||
|
||||
# VW port is a community feature, since we don't own one to test
|
||||
ret.communityFeature = True
|
||||
# Set global default parameters
|
||||
ret.radarOffCan = True
|
||||
ret.enableCamera = True # Stock camera detection doesn't apply to VW
|
||||
ret.steerRateCost = 1.0
|
||||
ret.steerActuatorDelay = 0.05 # Hopefully all racks are similar here
|
||||
ret.steerLimitTimer = 0.4
|
||||
|
||||
if candidate == CAR.GOLF:
|
||||
# Set common MQB parameters that will apply globally
|
||||
# Override these per-car as necessary
|
||||
ret.lateralTuning.pid.kpBP = [0.]
|
||||
ret.lateralTuning.pid.kiBP = [0.]
|
||||
ret.lateralTuning.pid.kpV = [0.6]
|
||||
ret.lateralTuning.pid.kiV = [0.2]
|
||||
ret.lateralTuning.pid.kf = 0.00006
|
||||
|
||||
# PER-PLATFORM PARAMETERS - DO NOT EDIT HERE TO TUNE INDIVIDUAL VEHICLES
|
||||
|
||||
if candidate in MQB_CARS:
|
||||
# Configurations shared between all MQB vehicles
|
||||
ret.carName = "volkswagen"
|
||||
ret.radarOffCan = True
|
||||
ret.safetyModel = car.CarParams.SafetyModel.volkswagen
|
||||
|
||||
# Additional common MQB parameters that may be overridden per-vehicle
|
||||
ret.steerRateCost = 0.5
|
||||
ret.steerActuatorDelay = 0.05 # Hopefully all MQB racks are similar here
|
||||
ret.steerLimitTimer = 0.4
|
||||
# Determine installed network location and trans type from fingerprint
|
||||
ret.networkLocation = NWL.fwdCamera if 0x122 in fingerprint[0] else NWL.gateway
|
||||
if 0xAD in fingerprint[0]: # Getriebe_11
|
||||
ret.transmissionType = TRANS.automatic
|
||||
elif 0x187 in fingerprint[0]: # EV_Gearshift
|
||||
ret.transmissionType = TRANS.direct
|
||||
else: # No trans at all
|
||||
ret.transmissionType = TRANS.manual
|
||||
|
||||
# As a starting point for speed-adjusted lateral tuning, use the example
|
||||
# map speed breakpoints from a VW Tiguan (SSP 399 page 9). It's unclear
|
||||
# whether the driver assist map breakpoints have any direct bearing on
|
||||
# HCA assist torque, but if they're good breakpoints for the driver,
|
||||
# they're probably good breakpoints for HCA as well. OP won't be driving
|
||||
# 250kph/155mph but it provides interpolation scaling above 100kmh/62mph.
|
||||
ret.lateralTuning.pid.kpBP = [0., 15 * CV.KPH_TO_MS, 50 * CV.KPH_TO_MS]
|
||||
ret.lateralTuning.pid.kiBP = [0., 15 * CV.KPH_TO_MS, 50 * CV.KPH_TO_MS]
|
||||
elif candidate in PQ_CARS:
|
||||
# Configurations shared between all PQ35/PQ46/NMS vehicles
|
||||
ret.carName = "volkswagen"
|
||||
ret.safetyModel = car.CarParams.SafetyModel.volkswagenPq
|
||||
|
||||
# FIXME: Per-vehicle parameters need to be reintegrated.
|
||||
# For the time being, per-vehicle stuff is being archived since we
|
||||
# can't auto-detect very well yet. Now that tuning is figured out,
|
||||
# averaged params should work reasonably on a range of cars. Owners
|
||||
# can tweak here, as needed, until we have car type auto-detection.
|
||||
# Determine installed network location and trans type from fingerprint
|
||||
ret.networkLocation = NWL.fwdCamera if 0x368 in fingerprint[0] else NWL.gateway
|
||||
if 0x440 in fingerprint[0]: # Getriebe_1
|
||||
ret.transmissionType = TRANS.automatic
|
||||
else: # No trans at all
|
||||
ret.transmissionType = TRANS.manual
|
||||
|
||||
ret.mass = 1700 + STD_CARGO_KG
|
||||
ret.wheelbase = 2.75
|
||||
ret.centerToFront = ret.wheelbase * 0.45
|
||||
cloudlog.warning("Detected network location: %s", ret.networkLocation)
|
||||
cloudlog.warning("Detected transmission type: %s", ret.transmissionType)
|
||||
|
||||
# PER-VEHICLE PARAMETERS - EDIT HERE TO TUNE INDIVIDUAL VEHICLES
|
||||
|
||||
if candidate == CAR.GENERICMQB:
|
||||
# FIXME: Defaulting to VW Golf Mk7 as a baseline.
|
||||
ret.mass = 1500 + STD_CARGO_KG # Average, varies on trim/package
|
||||
ret.wheelbase = 2.64
|
||||
ret.centerToFront = ret.wheelbase * 0.45 # Estimated
|
||||
ret.steerRatio = 15.6
|
||||
ret.lateralTuning.pid.kf = 0.00006
|
||||
ret.lateralTuning.pid.kpV = [0.15, 0.25, 0.60]
|
||||
ret.lateralTuning.pid.kiV = [0.05, 0.05, 0.05]
|
||||
tire_stiffness_factor = 0.6
|
||||
tire_stiffness_factor = 1.0
|
||||
|
||||
ret.enableCamera = True # Stock camera detection doesn't apply to VW
|
||||
ret.transmissionType = car.CarParams.TransmissionType.automatic
|
||||
elif candidate == CAR.GENERICPQ:
|
||||
ret.mass = 1375 + STD_CARGO_KG # Average, varies on trim/package
|
||||
ret.wheelbase = 2.58
|
||||
ret.centerToFront = ret.wheelbase * 0.45 # Estimated
|
||||
ret.steerRatio = 15.6
|
||||
tire_stiffness_factor = 1.0
|
||||
|
||||
# TODO: get actual value, for now starting with reasonable value for
|
||||
# civic and scaling by mass and wheelbase
|
||||
@@ -77,9 +103,9 @@ class CarInterface(CarInterfaceBase):
|
||||
|
||||
# returns a car.CarState
|
||||
def update(self, c, can_strings):
|
||||
self.dp_load_params('volkswagen')
|
||||
canMonoTimes = []
|
||||
buttonEvents = []
|
||||
params = Params()
|
||||
|
||||
# Process the most recent CAN message traffic, and check for validity
|
||||
# The camera CAN has no signals we use at this time, but we process it
|
||||
@@ -87,14 +113,14 @@ class CarInterface(CarInterfaceBase):
|
||||
self.cp.update_strings(can_strings)
|
||||
self.cp_cam.update_strings(can_strings)
|
||||
|
||||
ret = self.CS.update(self.cp)
|
||||
ret.canValid = self.cp.can_valid and self.cp_cam.can_valid
|
||||
ret = self.CS.update(self.cp, self.cp_cam, self.cp_acc, self.CP.transmissionType)
|
||||
ret.canValid = self.cp.can_valid # FIXME: Restore cp_cam valid check after proper LKAS camera detect
|
||||
ret.steeringRateLimited = self.CC.steer_rate_limited if self.CC is not None else False
|
||||
|
||||
# Update the EON metric configuration to match the car at first startup,
|
||||
# or if there's been a change.
|
||||
if self.CS.displayMetricUnits != self.displayMetricUnitsPrev:
|
||||
put_nonblocking("IsMetric", "1" if self.CS.displayMetricUnits else "0")
|
||||
params.put("IsMetric", "1" if self.CS.displayMetricUnits else "0")
|
||||
|
||||
# Check for and process state-change events (button press or release) from
|
||||
# the turn stalk switch or ACC steering wheel/control stalk buttons.
|
||||
@@ -113,11 +139,22 @@ class CarInterface(CarInterfaceBase):
|
||||
if self.CS.steeringFault:
|
||||
events.append(create_event('steerTempUnavailable', [ET.NO_ENTRY, ET.WARNING]))
|
||||
|
||||
# Engagement and longitudinal control using stock ACC. Make sure OP is
|
||||
# disengaged if stock ACC is disengaged.
|
||||
if not ret.cruiseState.enabled:
|
||||
events.append(create_event('pcmDisable', [ET.USER_DISABLE]))
|
||||
# Attempt OP engagement only on rising edge of stock ACC engagement.
|
||||
elif not self.cruise_enabled_prev:
|
||||
events.append(create_event('pcmEnable', [ET.ENABLE]))
|
||||
|
||||
ret.events = events
|
||||
ret.buttonEvents = buttonEvents
|
||||
ret.canMonoTimes = canMonoTimes
|
||||
|
||||
# update previous car states
|
||||
self.gas_pressed_prev = ret.gasPressed
|
||||
self.brake_pressed_prev = ret.brakePressed
|
||||
self.cruise_enabled_prev = ret.cruiseState.enabled
|
||||
self.displayMetricUnitsPrev = self.CS.displayMetricUnits
|
||||
self.buttonStatesPrev = self.CS.buttonStates.copy()
|
||||
|
||||
|
||||
@@ -1,8 +1,22 @@
|
||||
# --------------------------------------------------------------------------- #
|
||||
# #
|
||||
# from: https://github.com/jyoung8607/openpilot/tree/vw-community-private-pq #
|
||||
# verify: dinglx@uincore.net(https://shop442817640.taobao.com) #
|
||||
# Date: 2020-05-22 #
|
||||
# #
|
||||
# --------------------------------------------------------------------------- #
|
||||
|
||||
|
||||
from cereal import car
|
||||
from selfdrive.car import dbc_dict
|
||||
|
||||
class CarControllerParams:
|
||||
HCA_STEP = 2 # HCA_01 message frequency 50Hz
|
||||
LDW_STEP = 10 # LDW_02 message frequency 10Hz
|
||||
# FIXME: testing HCA at 100Hz on PQ to verify timebomb behavior
|
||||
# HCA_STEP = 2 # HCA_01 message frequency 50Hz
|
||||
HCA_STEP = 1 # HCA_01 message frequency 100Hz
|
||||
# FIXME: LDW is sent at 20Hz on PQ, need to make this conditional
|
||||
# LDW_STEP = 10 # LDW_02 message frequency 10Hz
|
||||
LDW_STEP = 5 # LDW_02 message frequency 20Hz
|
||||
GRA_ACC_STEP = 3 # GRA_ACC_01 message frequency 33Hz
|
||||
|
||||
GRA_VBP_STEP = 100 # Send ACC virtual button presses once a second
|
||||
@@ -12,8 +26,11 @@ class CarControllerParams:
|
||||
# Limiting rate-of-change based on real-world testing and Comma's safety
|
||||
# requirements for minimum time to lane departure.
|
||||
STEER_MAX = 300 # Max heading control assist torque 3.00 Nm
|
||||
STEER_DELTA_UP = 4 # Max HCA reached in 1.50s (STEER_MAX / (50Hz * 1.50))
|
||||
STEER_DELTA_DOWN = 10 # Min HCA reached in 0.60s (STEER_MAX / (50Hz * 0.60))
|
||||
# FIXME: testing steering rate hax for PQ
|
||||
# STEER_DELTA_UP = 4 # Max HCA reached in 1.50s (STEER_MAX / (50Hz * 1.50))
|
||||
# STEER_DELTA_DOWN = 10 # Min HCA reached in 0.60s (STEER_MAX / (50Hz * 0.60))
|
||||
STEER_DELTA_UP = 2 # Max HCA reached in 1.50s (STEER_MAX / (100Hz * 1.50))
|
||||
STEER_DELTA_DOWN = 5 # Min HCA reached in 0.60s (STEER_MAX / (100Hz * 0.60))
|
||||
STEER_DRIVER_ALLOWANCE = 80
|
||||
STEER_DRIVER_MULTIPLIER = 3 # weight driver torque heavily
|
||||
STEER_DRIVER_FACTOR = 1 # from dbc
|
||||
@@ -22,6 +39,10 @@ class CANBUS:
|
||||
pt = 0
|
||||
cam = 2
|
||||
|
||||
NWL = car.CarParams.NetworkLocation
|
||||
TRANS = car.CarParams.TransmissionType
|
||||
GEAR = car.CarState.GearShifter
|
||||
|
||||
BUTTON_STATES = {
|
||||
"accelCruise": False,
|
||||
"decelCruise": False,
|
||||
@@ -44,20 +65,49 @@ MQB_LDW_MESSAGES = {
|
||||
}
|
||||
|
||||
class CAR:
|
||||
GOLF = "Volkswagen Golf"
|
||||
GENERICMQB = "Generic Volkswagen MQB Platform Vehicle"
|
||||
GENERICPQ = "Generic Volkswagen PQ35/PQ46/NMS Platform Vehicle"
|
||||
|
||||
# Mega-fingerprint used to identify any and all MQB platform vehicles. Specific
|
||||
# make and model characteristics are looked up from the VIN later.
|
||||
# Note: 1471:8 observed as 1471:4 on a 2019 Jetta, and we can't carry both in one FP, effect TBD
|
||||
FINGERPRINTS = {
|
||||
CAR.GOLF: [
|
||||
# 76b83eb0245de90e|2019-10-21--17-40-42 - jyoung8607 car
|
||||
{64: 8, 134: 8, 159: 8, 173: 8, 178: 8, 253: 8, 257: 8, 260: 8, 262: 8, 264: 8, 278: 8, 279: 8, 283: 8, 286: 8, 288: 8, 289: 8, 290: 8, 294: 8, 299: 8, 302: 8, 346: 8, 385: 8, 418: 8, 427: 8, 668: 8, 679: 8, 681: 8, 695: 8, 779: 8, 780: 8, 783: 8, 792: 8, 795: 8, 804: 8, 806: 8, 807: 8, 808: 8, 809: 8, 870: 8, 896: 8, 897: 8, 898: 8, 901: 8, 917: 8, 919: 8, 949: 8, 958: 8, 960: 4, 981: 8, 987: 8, 988: 8, 991: 8, 997: 8, 1000: 8, 1019: 8, 1120: 8, 1122: 8, 1123: 8, 1124: 8, 1153: 8, 1162: 8, 1175: 8, 1312: 8, 1385: 8, 1413: 8, 1440: 5, 1514: 8, 1515: 8, 1520: 8, 1600: 8, 1601: 8, 1603: 8, 1605: 8, 1624: 8, 1626: 8, 1629: 8, 1631: 8, 1646: 8, 1648: 8, 1712: 6, 1714: 8, 1716: 8, 1717: 8, 1719: 8, 1720: 8, 1721: 8
|
||||
},
|
||||
{
|
||||
# China Golf GTI @easyeiji
|
||||
64: 8, 134: 8, 159: 8, 173: 8, 178: 8, 253: 8, 257: 8, 260: 8, 262: 8, 264: 8, 278: 8, 279: 8, 283: 8, 286: 8, 288: 8, 289: 8, 290: 8, 294: 8, 299: 8, 302: 8, 346: 8, 385: 8, 418: 8, 427: 8, 668: 8, 679: 8, 681: 8, 695: 8, 779: 8, 780: 8, 783: 8, 792: 8, 804: 8, 806: 8, 807: 8, 808: 8, 809: 8, 870: 8, 896: 8, 897: 8, 898: 8, 901: 8, 917: 8, 919: 8, 927: 8, 949: 8, 958: 8, 960: 4, 981: 8, 987: 8, 988: 8, 991: 8, 997: 8, 1000: 8, 1019: 8, 1120: 8, 1122: 8, 1123: 8, 1124: 8, 1153: 8, 1162: 8, 1175: 8, 1312: 8, 1385: 8, 1413: 8, 1440: 5, 1514: 8, 1515: 8, 1520: 8, 1529: 8, 1600: 8, 1601: 8, 1603: 8, 1605: 8, 1624: 8, 1629: 8, 1631: 8, 1646: 8, 1648: 8, 1712: 6, 1714: 8, 1716: 8, 1717: 8, 1719: 8, 1720: 8, 1721: 8
|
||||
},
|
||||
|
||||
CAR.GENERICMQB: [
|
||||
{178: 8, 1600: 8, 1601: 8, 1603: 8, 1605: 8, 695: 8, 1624: 8, 1626: 8, 1629: 8, 1631: 8, 1122: 8, 1123: 8,
|
||||
1124: 8, 1646: 8, 1648: 8, 1153: 8, 134: 8, 1162: 8, 1175: 8, 159: 8, 795: 8, 679: 8, 681: 8, 173: 8, 1712: 6,
|
||||
1714: 8, 1716: 8, 1717: 8, 1719: 8, 1720: 8, 1721: 8, 1312: 8, 806: 8, 253: 8, 1792: 8, 257: 8, 260: 8, 262: 8,
|
||||
897: 8, 264: 8, 779: 8, 780: 8, 783: 8, 278: 8, 279: 8, 792: 8, 283: 8, 285: 8, 286: 8, 901: 8, 288: 8, 289: 8,
|
||||
290: 8, 804: 8, 294: 8, 807: 8, 808: 8, 809: 8, 299: 8, 302: 8, 1351: 8, 346: 8, 870: 8, 1385: 8, 896: 8, 64: 8,
|
||||
898: 8, 1413: 8, 917: 8, 919: 8, 927: 8, 1440: 5, 929: 8, 930: 8, 427: 8, 949: 8, 958: 8, 960: 4, 418: 8, 981: 8,
|
||||
987: 8, 988: 8, 991: 8, 997: 8, 1000: 8, 1514: 8, 1515: 8, 1520: 8, 1019: 8, 385: 8, 668: 8, 1120: 8,
|
||||
1438: 8, 1461: 8, 391: 8, 1511: 8, 1516: 8, 568: 8, 569: 8, 826: 8, 827: 8, 1156: 8, 1157: 8, 1158: 8, 1471: 8,
|
||||
1635: 8, 376: 8}],
|
||||
|
||||
CAR.GENERICPQ: [
|
||||
# kamold, Edgy, austinc3030, Roy_001
|
||||
{80: 4, 194: 8, 208: 6, 210: 5, 294: 8, 416: 8, 428: 8, 640: 8, 648: 8, 800: 8, 835: 3, 870: 8, 872: 8, 878: 8,
|
||||
896: 8, 906: 4, 912: 8, 914: 8, 919: 8, 928: 8, 978: 7, 1056: 8, 1088: 8, 1152: 8, 1175: 8, 1184: 8, 1192: 8,
|
||||
1312: 8, 1386: 8, 1392: 5, 1394: 1, 1408: 8, 1440: 8, 1463: 8, 1470: 5, 1472: 8, 1488: 8, 1490: 8, 1500: 8,
|
||||
1550: 2, 1651: 3, 1652: 8, 1654: 2, 1658: 4, 1691: 3, 1736: 2, 1757: 8, 1824: 7, 1845: 7, 2000: 8, 1420: 8},
|
||||
# cd (powertrain CAN direct)
|
||||
{16: 7, 17: 7, 80: 4, 174: 8, 194: 8, 208: 6, 416: 8, 428: 8, 640: 8, 648: 8, 672: 8, 800: 8, 896: 8, 906: 4,
|
||||
912: 8, 914: 8, 915: 8, 919: 8, 928: 8, 946: 8, 976: 6, 978: 7, 1056: 8, 1152: 8, 1160: 8, 1162: 8, 1164: 8,
|
||||
1175: 8, 1184: 8, 1192: 8, 1306: 8, 1312: 8, 1344: 8, 1360: 8, 1386: 8, 1392: 5, 1394: 1, 1408: 8, 1416: 8,
|
||||
1420: 8, 1423: 8, 1440: 8, 1463: 8, 1488: 8, 1490: 8, 1494: 2, 1500: 8, 1504: 8, 1523: 8, 1527: 4, 1654: 2,
|
||||
1658: 2, 1754: 8, 1824: 7, 1827: 7, 2000: 8},
|
||||
{80: 4, 194: 8, 208: 6, 210: 5, 416: 8, 428: 8, 640: 8, 648: 8, 695: 8, 800: 8, 835: 3, 870: 8, 872: 8, 878: 8, 896: 8, 906: 4, 912: 8, 914: 8, 928: 8, 954: 8, 978: 7, 1056: 8, 1088: 8, 1152: 8, 1175: 8, 1184: 8, 1192: 8, 1312: 8, 1386: 8, 1392: 5, 1394: 1, 1408: 8, 1440: 8, 1463: 8, 1470: 5, 1472: 8, 1488: 8, 1490: 8, 1500: 8, 1550: 2, 1650: 8, 1651: 4, 1652: 8, 1691: 4, 1757: 3, 1824: 7, 1845: 7, 2000: 8},
|
||||
{80: 4, 194: 8, 208: 6, 210: 5, 416: 8, 428: 8, 640: 8, 648: 8, 695: 8, 800: 8, 835: 3, 870: 8, 872: 8, 878: 8, 896: 8, 906: 4, 912: 8, 914: 8, 928: 8, 954: 8, 978: 7, 1056: 8, 1088: 8, 1152: 8, 1175: 8, 1184: 8, 1192: 8, 1312: 8, 1386: 8, 1392: 5, 1394: 1, 1408: 8, 1440: 8, 1463: 8, 1470: 5, 1472: 8, 1488: 8, 1490: 8, 1500: 8, 1550: 2, 1650: 5, 1651: 3, 1652: 8, 1691: 3, 1736: 2, 1757: 8, 1824: 7, 1845: 7, 2000: 8
|
||||
},
|
||||
{80: 4, 194: 8, 208: 6, 210: 5, 416: 8, 428: 8, 640: 8, 648: 8, 695: 8, 800: 8, 835: 3, 870: 8, 872: 8, 878: 8, 896: 8, 906: 4, 912: 8, 914: 8, 928: 8, 954: 8, 978: 7, 1056: 8, 1088: 8, 1152: 8, 1175: 8, 1184: 8, 1192: 8, 1312: 8, 1386: 8, 1392: 5, 1394: 1, 1408: 8, 1440: 8, 1463: 8, 1470: 5, 1472: 8, 1488: 8, 1490: 8, 1500: 8, 1550: 2, 1650: 4, 1651: 3, 1652: 8, 1691: 2, 1736: 2, 1757: 3, 1824: 7, 1845: 7, 2000: 8
|
||||
}
|
||||
],
|
||||
}
|
||||
|
||||
MQB_CARS = [CAR.GENERICMQB]
|
||||
PQ_CARS = [CAR.GENERICPQ]
|
||||
|
||||
DBC = {
|
||||
CAR.GOLF: dbc_dict('vw_mqb_2010', None),
|
||||
CAR.GENERICMQB: dbc_dict('vw_mqb_2010', None),
|
||||
CAR.GENERICPQ: dbc_dict('vw_golf_mk4', None),
|
||||
}
|
||||
|
||||
@@ -1,5 +1,8 @@
|
||||
# CAN controls for MQB platform Volkswagen, Audi, Skoda and SEAT.
|
||||
# PQ35/PQ46/NMS, and any future MLB, to come later.
|
||||
# ----------------------------------------------------------------------- #
|
||||
# #
|
||||
# CAN message packing for MQB vehicles #
|
||||
# #
|
||||
# ----------------------------------------------------------------------- #
|
||||
|
||||
def create_mqb_steering_control(packer, bus, apply_steer, idx, lkas_enabled):
|
||||
values = {
|
||||
@@ -46,7 +49,49 @@ def create_mqb_acc_buttons_control(packer, bus, buttonStatesToSend, CS, idx):
|
||||
"GRA_Typ_Hauptschalter": CS.graTypHauptschalter,
|
||||
"GRA_Codierung": 2,
|
||||
"GRA_Tip_Stufe_2": CS.graTipStufe2,
|
||||
"GRA_Typ468": CS.graTyp468,
|
||||
"GRA_ButtonTypeInfo": CS.graButtonTypeInfo
|
||||
}
|
||||
|
||||
return packer.make_can_msg("GRA_ACC_01", bus, values, idx)
|
||||
|
||||
# ----------------------------------------------------------------------- #
|
||||
# #
|
||||
# CAN message packing for PQ35/PQ46/NMS vehicles #
|
||||
# #
|
||||
# ----------------------------------------------------------------------- #
|
||||
|
||||
def create_pq_steering_control(packer, bus, apply_steer, idx, lkas_enabled):
|
||||
values = {
|
||||
"HCA_Zaehler": idx,
|
||||
"LM_Offset": abs(apply_steer),
|
||||
"LM_OffSign": 1 if apply_steer < 0 else 0,
|
||||
"HCA_Status": 5 if (lkas_enabled and apply_steer != 0) else 3,
|
||||
"Vib_Freq": 16,
|
||||
}
|
||||
|
||||
dat = packer.make_can_msg("HCA_1", bus, values)[2]
|
||||
values["HCA_Checksumme"] = dat[1] ^ dat[2] ^ dat[3] ^ dat[4]
|
||||
return packer.make_can_msg("HCA_1", bus, values)
|
||||
|
||||
def create_pq_hud_control(packer, bus, hca_enabled, steering_pressed, hud_alert, leftLaneVisible, rightLaneVisible):
|
||||
if hca_enabled:
|
||||
leftlanehud = 3 if leftLaneVisible else 1
|
||||
rightlanehud = 3 if rightLaneVisible else 1
|
||||
else:
|
||||
leftlanehud = 2 if leftLaneVisible else 1
|
||||
rightlanehud = 2 if rightLaneVisible else 1
|
||||
|
||||
values = {
|
||||
"Right_Lane_Status": rightlanehud,
|
||||
"Left_Lane_Status": leftlanehud,
|
||||
"SET_ME_X1": 1,
|
||||
"Kombi_Lamp_Orange": 1 if hca_enabled and steering_pressed else 0,
|
||||
"Kombi_Lamp_Green": 1 if hca_enabled and not steering_pressed else 0,
|
||||
}
|
||||
return packer.make_can_msg("LDW_1", bus, values)
|
||||
|
||||
pass
|
||||
|
||||
def create_pq_acc_buttons_control(packer, bus, buttonStatesToSend, CS, idx):
|
||||
pass
|
||||
|
||||
@@ -143,3 +143,13 @@ extern "C" void framebuffer_swap(FramebufferState *s) {
|
||||
assert(glGetError() == GL_NO_ERROR);
|
||||
}
|
||||
|
||||
extern "C" void framebuffer_swap_layer(FramebufferState *s, int32_t layer) {
|
||||
status_t status;
|
||||
SurfaceComposerClient::openGlobalTransaction();
|
||||
status = s->control->setLayer(layer);
|
||||
SurfaceComposerClient::closeGlobalTransaction();
|
||||
assert(status == 0);
|
||||
|
||||
s->s = s->control->getSurface();
|
||||
assert(s->s != NULL);
|
||||
}
|
||||
@@ -13,6 +13,7 @@ FramebufferState* framebuffer_init(
|
||||
|
||||
void framebuffer_set_power(FramebufferState *s, int mode);
|
||||
void framebuffer_swap(FramebufferState *s);
|
||||
void framebuffer_swap_layer(FramebufferState *s, int32_t layer);
|
||||
|
||||
/* Display power modes */
|
||||
enum {
|
||||
|
||||
@@ -76,6 +76,8 @@ class PathPlanner():
|
||||
self.last_ts = 0.
|
||||
self.dp_last_modified = None
|
||||
self.dp_enable_sr_boost = False
|
||||
self.dp_continuous_auto_lc = False
|
||||
self.dp_did_auto_lc = False
|
||||
|
||||
self.dp_steer_ratio = 0.
|
||||
self.dp_sr_boost_bp = None
|
||||
@@ -115,6 +117,7 @@ class PathPlanner():
|
||||
if self.dragon_assisted_lc_min_mph < 0:
|
||||
self.dragon_assisted_lc_min_mph = 0
|
||||
if self.dragon_auto_lc_enabled:
|
||||
self.dp_continuous_auto_lc = True if self.params.get("DragonEnableContALC", encoding='utf8') == "1" else False
|
||||
# adjustable auto lc min speed
|
||||
try:
|
||||
self.dragon_auto_lc_min_mph = float(self.params.get("DragonAutoLCMinMPH", encoding='utf8'))
|
||||
@@ -194,7 +197,16 @@ class PathPlanner():
|
||||
if not below_lane_change_speed and self.dragon_auto_lc_enabled and v_ego >= self.dragon_auto_lc_min_mph:
|
||||
# we allow auto lc when speed reached dragon_auto_lc_min_mph
|
||||
self.dragon_auto_lc_allowed = True
|
||||
else:
|
||||
# if too slow, we reset all the variables
|
||||
self.dragon_auto_lc_allowed = False
|
||||
self.dragon_auto_lc_timer = None
|
||||
|
||||
# disable auto lc when continuous is off and already did auto lc once
|
||||
if self.dragon_auto_lc_allowed and not self.dp_continuous_auto_lc and self.dp_did_auto_lc:
|
||||
self.dragon_auto_lc_allowed = False
|
||||
|
||||
if self.dragon_auto_lc_allowed:
|
||||
if self.dragon_auto_lc_timer is None:
|
||||
# we only set timer when in preLaneChange state, dragon_auto_lc_delay delay
|
||||
if self.lane_change_state == LaneChangeState.preLaneChange:
|
||||
@@ -202,10 +214,7 @@ class PathPlanner():
|
||||
elif cur_time >= self.dragon_auto_lc_timer:
|
||||
# if timer is up, we set torque_applied to True to fake user input
|
||||
torque_applied = True
|
||||
else:
|
||||
# if too slow, we reset all the variables
|
||||
self.dragon_auto_lc_allowed = False
|
||||
self.dragon_auto_lc_timer = None
|
||||
self.dp_did_auto_lc = True
|
||||
|
||||
# we reset the timers when torque is applied regardless
|
||||
if torque_applied:
|
||||
@@ -249,6 +258,9 @@ class PathPlanner():
|
||||
else:
|
||||
self.lane_change_timer += DT_MDL
|
||||
|
||||
if self.prev_one_blinker and not one_blinker:
|
||||
self.dp_did_auto_lc = False
|
||||
|
||||
self.prev_one_blinker = one_blinker
|
||||
|
||||
desire = DESIRES[self.lane_change_direction][self.lane_change_state]
|
||||
|
||||
@@ -18,7 +18,6 @@ params = Params()
|
||||
from common.realtime import sec_since_boot, DT_TRML
|
||||
from common.dp import get_last_modified
|
||||
import collections
|
||||
import math
|
||||
|
||||
dashcam_videos_path = '/sdcard/dashcam/'
|
||||
dashcam_duration = 60 # max is 180
|
||||
@@ -51,36 +50,23 @@ def main(gctx=None):
|
||||
retry += 1
|
||||
time.sleep(5)
|
||||
|
||||
idlecam_enabled = False
|
||||
health_timeout = int(1000 * 2.5 * DT_TRML) # 2.5x the expected health frequency
|
||||
health_sock = messaging.sub_sock('health', timeout=health_timeout)
|
||||
sensor_sock = messaging.sub_sock('sensorEvents')
|
||||
samples = collections.deque([])
|
||||
start_ts = None
|
||||
last_started = False
|
||||
|
||||
|
||||
dragon_dashcam_hours = 24. * 60 * 60
|
||||
max_storage = (max_size_per_file/dashcam_duration) * dragon_dashcam_hours
|
||||
dashcam_enabled = False
|
||||
last_ts = 0.
|
||||
last_modified = None
|
||||
sleep = 5
|
||||
|
||||
thermal_sock = messaging.sub_sock('thermal')
|
||||
params.put("DragonDashcamImpactDetectStarted", "0")
|
||||
while dashcam_allowed:
|
||||
type = TYPE_DRIVING
|
||||
duration = dashcam_duration
|
||||
ts = sec_since_boot()
|
||||
if ts - last_ts >= 5.:
|
||||
modified = get_last_modified()
|
||||
if last_modified != modified:
|
||||
dashcam_enabled = True if params.get("DragonEnableDashcam", encoding='utf8') == "1" else False
|
||||
if dashcam_enabled:
|
||||
idlecam_enabled = True if params.get("DragonDashcamImpactDetect", encoding='utf8') == "1" else False
|
||||
else:
|
||||
idlecam_enabled = False
|
||||
try:
|
||||
dragon_dashcam_hours = float(params.get("DragonDashcamHours", encoding='utf8')) * 60 * 60
|
||||
except (TypeError, ValueError):
|
||||
@@ -92,51 +78,11 @@ def main(gctx=None):
|
||||
|
||||
health = messaging.recv_sock(health_sock, wait=False)
|
||||
started = True if health is not None and (health.health.ignitionLine or health.health.ignitionCan) else False
|
||||
record_started = False
|
||||
|
||||
if last_started != started:
|
||||
params.put("DragonDashcamImpactDetectStarted", "0")
|
||||
samples.clear()
|
||||
|
||||
if started:
|
||||
sleep = 5
|
||||
if dashcam_enabled:
|
||||
record_started = True
|
||||
else:
|
||||
if idlecam_enabled:
|
||||
sleep = 0.02
|
||||
sensor = messaging.recv_sock(sensor_sock, wait=False)
|
||||
if sensor is not None:
|
||||
for event in sensor.sensorEvents:
|
||||
# accelerometer
|
||||
if event.type == 1:
|
||||
acc_x = event.acceleration.v[0]
|
||||
acc_y = event.acceleration.v[1]
|
||||
acc_z = event.acceleration.v[2]
|
||||
g = math.sqrt(acc_x*acc_x+acc_y*acc_y+acc_z*acc_z)
|
||||
val = round(9.8-g,2)
|
||||
if len(samples) >= 250:
|
||||
avg_sample = round(sum(samples)/len(samples),2)
|
||||
if start_ts is None and abs(val - avg_sample) >= 0.3:
|
||||
duration = shock_duration
|
||||
type = TYPE_SHOCK
|
||||
start_ts = ts
|
||||
record_started = True
|
||||
params.put("DragonDashcamImpactDetectStarted", "1")
|
||||
samples.pop()
|
||||
samples.appendleft(val)
|
||||
if start_ts is not None and ts - start_ts >= shock_duration-1:
|
||||
start_ts = None
|
||||
record_started = False
|
||||
params.put("DragonDashcamImpactDetectStarted", "0")
|
||||
|
||||
last_started = started
|
||||
|
||||
if record_started:
|
||||
if started and dashcam_enabled:
|
||||
now = datetime.datetime.now()
|
||||
file_name = now.strftime("%Y-%m-%d_%H-%M-%S")
|
||||
postfix = '_impact' if type == TYPE_SHOCK else ''
|
||||
os.system("screenrecord --bit-rate %s --time-limit %s %s%s%s.mp4 &" % (bit_rates, duration, dashcam_videos_path, file_name, postfix))
|
||||
os.system("screenrecord --bit-rate %s --time-limit %s %s%s.mp4 &" % (bit_rates, duration, dashcam_videos_path, file_name))
|
||||
start_time = time.time()
|
||||
try:
|
||||
used_spaces = get_used_spaces()
|
||||
@@ -167,7 +113,7 @@ def main(gctx=None):
|
||||
if sleep_time >= 0.:
|
||||
time.sleep(sleep_time)
|
||||
else:
|
||||
time.sleep(sleep)
|
||||
time.sleep(5)
|
||||
|
||||
def get_used_spaces():
|
||||
return sum(os.path.getsize(dashcam_videos_path + f) for f in os.listdir(dashcam_videos_path) if os.path.isfile(dashcam_videos_path + f))
|
||||
|
||||
@@ -84,11 +84,11 @@ default_conf = {
|
||||
'DragonUIScreenOffDriving': '0',
|
||||
'DragonEnableAutoUpdate': '1',
|
||||
'DragonUIBrightness': '0',
|
||||
'DragonDashcamImpactDetect': '0',
|
||||
'DragonDashcamImpactDetectStarted': '0',
|
||||
'DragonEnableUploadOnMobile': '0',
|
||||
'DragonEnableUploadOnHotspot': '0',
|
||||
'DragonMaxSpeedLimit': '92',
|
||||
'DragonEnableRating': '1',
|
||||
'DragonEnableContALC' : '0',
|
||||
}
|
||||
|
||||
deprecated_conf = {
|
||||
|
||||
@@ -442,9 +442,6 @@ def manager_thread():
|
||||
|
||||
if params.get("DragonEnableDashcam", encoding='utf8') == "1":
|
||||
persistent_processes.append('dashcamd')
|
||||
if params.get("DragonDashcamImpactDetect", encoding='utf8') == "1":
|
||||
car_started_processes.remove('sensord')
|
||||
persistent_processes.append('sensord')
|
||||
|
||||
# start daemon processes
|
||||
for p in daemon_processes:
|
||||
|
||||
@@ -237,7 +237,7 @@ def thermald_thread():
|
||||
location = location.gpsLocation if location else None
|
||||
msg = read_thermal()
|
||||
|
||||
if params.get('DragonNoctuaMode', encoding='utf8') == "1":
|
||||
if handle_fan is None and params.get('DragonNoctuaMode', encoding='utf8') == "1":
|
||||
setup_eon_fan()
|
||||
handle_fan = handle_fan_eon
|
||||
|
||||
@@ -274,9 +274,6 @@ def thermald_thread():
|
||||
params.panda_disconnect()
|
||||
health_prev = health
|
||||
|
||||
if not ignition and params.get("DragonDashcamImpactDetectStarted", encoding='utf8') == "1":
|
||||
ignition = True
|
||||
|
||||
# get_network_type is an expensive call. update every 10s
|
||||
if (count % int(10. / DT_TRML)) == 0:
|
||||
try:
|
||||
@@ -350,7 +347,7 @@ def thermald_thread():
|
||||
thermal_status = ThermalStatus.green
|
||||
|
||||
if not dp_temp_monitor:
|
||||
thermal_status = ThermalStatus.green
|
||||
thermal_status = ThermalStatus.yellow
|
||||
|
||||
# **** starting logic ****
|
||||
time_valid = True
|
||||
|
||||
@@ -840,7 +840,7 @@ static void ui_draw_infobar(UIState *s) {
|
||||
|
||||
nvgBeginPath(s->vg);
|
||||
nvgRect(s->vg, rect_x, rect_y, rect_w, rect_h);
|
||||
nvgFillColor(s->vg, COLOR_BLACK_ALPHA(100));
|
||||
nvgFillColor(s->vg, COLOR_BLACK_ALPHA(s->dragon_waze_mode? 150 : 100));
|
||||
nvgFill(s->vg);
|
||||
|
||||
nvgFontSize(s->vg, hasSidebar? 35:42);
|
||||
@@ -1175,8 +1175,11 @@ static void ui_draw_background(UIState *s) {
|
||||
int bg_status = s->status;
|
||||
assert(bg_status < ARRAYSIZE(bg_colors));
|
||||
const uint8_t *color = bg_colors[bg_status];
|
||||
|
||||
glClearColor(color[0]/256.0, color[1]/256.0, color[2]/256.0, 1.0);
|
||||
if (s->vision_seen && s->dragon_waze_mode) {
|
||||
glClearColor(0, 0, 0, 0);
|
||||
} else {
|
||||
glClearColor(color[0]/256.0, color[1]/256.0, color[2]/256.0, 1.0);
|
||||
}
|
||||
glClear(GL_STENCIL_BUFFER_BIT | GL_COLOR_BUFFER_BIT);
|
||||
}
|
||||
|
||||
@@ -1187,7 +1190,9 @@ void ui_draw(UIState *s) {
|
||||
glViewport(0, 0, s->fb_w, s->fb_h);
|
||||
nvgBeginFrame(s->vg, s->fb_w, s->fb_h, 1.0f);
|
||||
ui_draw_sidebar(s);
|
||||
if (s->started && s->active_app == cereal::UiLayoutState::App::NONE && s->status != STATUS_STOPPED && s->vision_seen) {
|
||||
if (s->vision_seen && s->dragon_waze_mode) {
|
||||
ui_draw_vision(s);
|
||||
} else if (s->started && s->active_app == cereal::UiLayoutState::App::NONE && s->status != STATUS_STOPPED && s->vision_seen) {
|
||||
ui_draw_vision(s);
|
||||
}
|
||||
nvgEndFrame(s->vg);
|
||||
|
||||
@@ -20,8 +20,6 @@ static void ui_draw_sidebar_home_button(UIState *s) {
|
||||
bool homeActive = s->active_app == cereal::UiLayoutState::App::HOME;
|
||||
const int home_btn_xr = !s->scene.uilayout_sidebarcollapsed ? home_btn_x : -(sbr_w);
|
||||
|
||||
ui_draw_image(s->vg, home_btn_xr, home_btn_y, home_btn_w, home_btn_h, s->img_button_home, homeActive ? 1.0f : 0.65f);
|
||||
|
||||
if (s->dragon_updating) {
|
||||
nvgBeginPath(s->vg);
|
||||
nvgCircle(s->vg, home_btn_xr + home_btn_w/2, home_btn_y + home_btn_h/2, 90);
|
||||
@@ -38,9 +36,11 @@ static void ui_draw_sidebar_home_button(UIState *s) {
|
||||
|
||||
s->scene.alert_rate += 5*s->scene.alert_type;
|
||||
|
||||
if (s->scene.alert_rate == 0 || s->scene.alert_rate == 255) {
|
||||
if (s->scene.alert_rate <= 0 || s->scene.alert_rate >= 255) {
|
||||
s->scene.alert_type *= -1;
|
||||
}
|
||||
} else {
|
||||
ui_draw_image(s->vg, home_btn_xr, home_btn_y, home_btn_w, home_btn_h, s->img_button_home, homeActive ? 1.0f : 0.65f);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
+7
-5
@@ -43,7 +43,7 @@ static void set_awake(UIState *s, bool awake) {
|
||||
#ifdef QCOM
|
||||
if (awake) {
|
||||
// 30 second timeout at 30 fps
|
||||
s->awake_timeout = s->dragon_dashcam_impact_detect_started? 60*30 : (s->dragon_ui_screen_off_driving && s->started)? 10*30 : 30*30;
|
||||
s->awake_timeout = (s->dragon_ui_screen_off_driving && s->started)? 10*30 : 30*30;
|
||||
}
|
||||
if (s->awake != awake) {
|
||||
s->awake = awake;
|
||||
@@ -398,7 +398,6 @@ static void ui_init_vision(UIState *s, const VisionStreamBufs back_bufs,
|
||||
read_param_bool(&s->dragon_ui_screen_off_reversing, "DragonUIScreenOffReversing");
|
||||
read_param_bool(&s->dragon_ui_screen_off_driving, "DragonUIScreenOffDriving");
|
||||
read_param_uint64(&s->dragon_ui_brightness, "DragonUIBrightness");
|
||||
read_param_bool(&s->dragon_dashcam_impact_detect_started, "DragonDashcamImpactDetectStarted");
|
||||
|
||||
if (s->dragon_waze_mode) {
|
||||
s->dragon_ui_speed = false;
|
||||
@@ -443,7 +442,6 @@ static void ui_init_vision(UIState *s, const VisionStreamBufs back_bufs,
|
||||
// dp
|
||||
s->dragon_last_modified_timeout = UI_FREQ / 4;
|
||||
s->dragon_updating_timeout = UI_FREQ / 5;
|
||||
s->dragon_dashcam_impact_detect_started_timeout = UI_FREQ / 6;
|
||||
}
|
||||
|
||||
static PathData read_path(cereal::ModelData::PathData::Reader pathp) {
|
||||
@@ -653,6 +651,7 @@ void handle_message(UIState *s, Message* msg) {
|
||||
// Handle onroad/offroad transition
|
||||
if (!s->started) {
|
||||
if (s->status != STATUS_STOPPED) {
|
||||
framebuffer_swap_layer(s->fb, 0);
|
||||
update_status(s, STATUS_STOPPED);
|
||||
s->alert_sound_timeout = 0;
|
||||
s->vision_seen = false;
|
||||
@@ -764,6 +763,10 @@ static void ui_update(UIState *s) {
|
||||
|
||||
s->alert_blinking_alpha = 1.0;
|
||||
s->alert_blinked = false;
|
||||
|
||||
if (s->dragon_waze_mode) {
|
||||
framebuffer_swap_layer(s->fb, 0x00010000);
|
||||
}
|
||||
}
|
||||
|
||||
zmq_pollitem_t polls[1] = {{0}};
|
||||
@@ -1083,7 +1086,7 @@ int main(int argc, char* argv[]) {
|
||||
s->scene.ui_viz_rw = hasSidebar ? box_w : (box_w + sbr_w - (bdr_s * 2));
|
||||
s->scene.ui_viz_ro = hasSidebar ? -(sbr_w - 6 * bdr_s) : 0;
|
||||
|
||||
if (s->vision_connected && s->dragon_waze_mode) {
|
||||
if (s->started && s->dragon_waze_mode) {
|
||||
// always collapsed sidebar when vision is connect and in waze mode
|
||||
s->scene.uilayout_sidebarcollapsed = true;
|
||||
} else {
|
||||
@@ -1211,7 +1214,6 @@ int main(int argc, char* argv[]) {
|
||||
// dp
|
||||
read_param_bool_timeout(&s->dragon_updating, "DragonUpdating", &s->dragon_updating_timeout);
|
||||
read_param_string_timeout(s->dragon_last_modified, "DragonLastModified", &s->dragon_last_modified_timeout);
|
||||
read_param_bool_timeout(&s->dragon_dashcam_impact_detect_started, "DragonDashcamImpactDetectStarted", &s->dragon_dashcam_impact_detect_started_timeout);
|
||||
if (strcmp(last_modified, s->dragon_last_modified) != 0) {
|
||||
strncpy(last_modified, s->dragon_last_modified, sizeof(last_modified));
|
||||
|
||||
|
||||
@@ -330,7 +330,6 @@ typedef struct UIState {
|
||||
SubSocket *carstate_sock;
|
||||
int dragon_updating_timeout;
|
||||
int dragon_last_modified_timeout;
|
||||
int dragon_dashcam_impact_detect_started_timeout;
|
||||
|
||||
bool dragon_ui_speed;
|
||||
bool dragon_ui_event;
|
||||
@@ -356,7 +355,6 @@ typedef struct UIState {
|
||||
char dragon_last_modified[20];
|
||||
bool dragon_ui_screen_off_driving;
|
||||
uint64_t dragon_ui_brightness;
|
||||
bool dragon_dashcam_impact_detect_started;
|
||||
} UIState;
|
||||
|
||||
// API
|
||||
|
||||
Reference in New Issue
Block a user