VW PQ: Message updates, checksum and counter support (#633)

* refactor MQB checksum/counter to prep for PQ

* first pass at PQ checksums and counters

* remove checksum and counter alignment checks

* forgot HCA_1

* Revert "remove checksum and counter alignment checks"

This reverts commit 0d30ee9b854c933bf12ee9ca26ad0b0f29956cea.

* don't check counter offset

* tweak comment

* handle checksum not starting at zero

* remove unused argument

* add LDW_Textbits to LDW_1

* Update can/common.cc

Co-authored-by: Adeeb Shihadeh <adeebshihadeh@gmail.com>

* fix counter again; minimize diff

* additional door-open signals

* add trunk lid state

* update LDW_Status message and signals

* typo

* make XOR checksum generic

Co-authored-by: Adeeb Shihadeh <adeebshihadeh@gmail.com>
This commit is contained in:
Jason Young 2022-07-15 12:29:12 -05:00 committed by GitHub
parent 8e5cd0d302
commit 2afccacd52
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
6 changed files with 61 additions and 26 deletions

View File

@ -188,6 +188,20 @@ unsigned int volkswagen_mqb_checksum(uint32_t address, const Signal &sig, const
return crc ^ 0xFF; // Return after standard final XOR for CRC8 8H2F/AUTOSAR
}
unsigned int xor_checksum(uint32_t address, const Signal &sig, const std::vector<uint8_t> &d) {
uint8_t checksum = 0;
int checksum_byte = sig.start_bit / 8;
// Simple XOR over the payload, except for the byte where the checksum lives.
for (int i = 0; i < d.size(); i++) {
if (i != checksum_byte) {
checksum ^= d[i];
}
}
return checksum;
}
unsigned int pedal_checksum(uint32_t address, const Signal &sig, const std::vector<uint8_t> &d) {
uint8_t crc = 0xFF;
uint8_t poly = 0xD5; // standard crc8

View File

@ -27,6 +27,7 @@ unsigned int toyota_checksum(uint32_t address, const Signal &sig, const std::vec
unsigned int subaru_checksum(uint32_t address, const Signal &sig, const std::vector<uint8_t> &d);
unsigned int chrysler_checksum(uint32_t address, const Signal &sig, const std::vector<uint8_t> &d);
unsigned int volkswagen_mqb_checksum(uint32_t address, const Signal &sig, const std::vector<uint8_t> &d);
unsigned int xor_checksum(uint32_t address, const Signal &sig, const std::vector<uint8_t> &d);
unsigned int hkg_can_fd_checksum(uint32_t address, const Signal &sig, const std::vector<uint8_t> &d);
unsigned int pedal_checksum(uint32_t address, const Signal &sig, const std::vector<uint8_t> &d);

View File

@ -19,6 +19,7 @@ cdef extern from "common_dbc.h":
TOYOTA_CHECKSUM,
PEDAL_CHECKSUM,
VOLKSWAGEN_MQB_CHECKSUM,
XOR_CHECKSUM,
SUBARU_CHECKSUM,
CHRYSLER_CHECKSUM
HKG_CAN_FD_CHECKSUM,

View File

@ -36,6 +36,7 @@ enum SignalType {
TOYOTA_CHECKSUM,
PEDAL_CHECKSUM,
VOLKSWAGEN_MQB_CHECKSUM,
XOR_CHECKSUM,
SUBARU_CHECKSUM,
CHRYSLER_CHECKSUM,
HKG_CAN_FD_CHECKSUM,

View File

@ -68,6 +68,8 @@ ChecksumState* get_checksum(const std::string& dbc_name) {
s = new ChecksumState({16, -1, 0, -1, true, HKG_CAN_FD_CHECKSUM, COUNTER, &hkg_can_fd_checksum});
} else if (startswith(dbc_name, {"vw_mqb_2010"})) {
s = new ChecksumState({8, 4, 0, 0, true, VOLKSWAGEN_MQB_CHECKSUM, COUNTER, &volkswagen_mqb_checksum});
} else if (startswith(dbc_name, {"vw_golf_mk4"})) {
s = new ChecksumState({8, 4, 0, -1, true, XOR_CHECKSUM, COUNTER, &xor_checksum});
} else if (startswith(dbc_name, "subaru_global_")) {
s = new ChecksumState({8, -1, 0, -1, true, SUBARU_CHECKSUM, DEFAULT, &subaru_checksum});
} else if (startswith(dbc_name, "chrysler_")) {

View File

@ -616,7 +616,7 @@ BO_ 1504 Klima_1: 8 XXX
SG_ Drehzahlanhebung : 0|1@1+ (1,0) [0|0] "" XXX
BO_ 906 GRA_Neu: 4 XXX
SG_ GRA_Checksum : 0|8@1+ (1,0) [0|255] "" XXX
SG_ CHECKSUM : 0|8@1+ (1,0) [0|255] "" XXX
SG_ GRA_Hauptschalt : 8|1@1+ (1,0) [0|1] "" XXX
SG_ GRA_Abbrechen : 9|1@1+ (1,0) [0|1] "" XXX
SG_ GRA_Down_kurz : 10|1@1+ (1,0) [0|1] "" XXX
@ -628,7 +628,7 @@ BO_ 906 GRA_Neu: 4 XXX
SG_ GRA_Neu_Setzen : 16|1@1+ (1,0) [0|1] "" XXX
SG_ GRA_Recall : 17|1@1+ (1,0) [0|1] "" XXX
SG_ GRA_Sender : 18|2@1+ (1,0) [0|3] "" XXX
SG_ GRA_Neu_Zaehler : 20|4@1+ (1,0) [0|15] "" XXX
SG_ COUNTER : 20|4@1+ (1,0) [0|15] "" XXX
SG_ GRA_Tip_Down : 24|1@1+ (1,0) [0|1] "" XXX
SG_ GRA_Tip_Up : 25|1@1+ (1,0) [0|1] "" XXX
SG_ GRA_Zeitluecke : 26|2@1+ (1,0) [0|3] "" XXX
@ -683,7 +683,7 @@ BO_ 1344 Getriebe_2: 8 XXX
BO_ 1088 Getriebe_1: 8 XXX
SG_ Wandlerverlustmoment : 56|8@1+ (0.39,0) [0|99.06] "MDI" XXX
SG_ Fehlerspeichereintrag__Getriebe : 55|1@1+ (1,0) [0|0] "" XXX
SG_ Zaehler_Getriebe_1 : 51|4@1+ (1,0) [0|15] "" XXX
SG_ COUNTER : 51|4@1+ (1,0) [0|15] "" XXX
SG_ Gang_eingelegt : 50|1@1+ (1,0) [0|0] "" XXX
SG_ Schaltabsicht : 49|1@1+ (1,0) [0|0] "" XXX
SG_ Motor_aus : 48|1@1+ (1,0) [0|0] "" XXX
@ -722,6 +722,8 @@ BO_ 912 Gate_Komf_1: 8 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_ BSK_HL_geoeffnet : 26|1@1+ (1,0) [0|1] "" XXX
SG_ BSK_HR_geoeffnet : 27|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
@ -735,6 +737,8 @@ BO_ 912 Gate_Komf_1: 8 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_ BSK_BT_geoeffnet : 41|1@1+ (1,0) [0|1] "" XXX
SG_ BSK_HD_Hauptraste : 43|1@1+ (1,0) [0|1] "" 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
@ -857,8 +861,8 @@ BO_ 424 Bremse_6: 3 XXX
SG_ Bremsdruck__Bremse_6_ : 0|10@1+ (0.3255,-40) [-40|293] "bar" XXX
BO_ 1192 Bremse_5: 8 XXX
SG_ Checksumme_Bremse_5 : 56|8@1+ (1,0) [0|0] "" XXX
SG_ Zaehler_Bremse_5 : 52|4@1+ (1,0) [0|15] "" XXX
SG_ CHECKSUM : 56|8@1+ (1,0) [0|0] "" XXX
SG_ COUNTER : 52|4@1+ (1,0) [0|15] "" XXX
SG_ Bremslicht_ECD : 51|1@1+ (1,0) [0|0] "" XXX
SG_ Bremsentemperatur_vorn : 48|3@1+ (125,125) [125|1000] "C" XXX
SG_ Frei_Bremse_5_5 : 40|8@1+ (1,0) [0|0] "" XXX
@ -909,7 +913,7 @@ BO_ 416 Bremse_1: 8 XXX
SG_ ESP_Systemstatus_4_1 : 62|1@1+ (1,0) [0|0] "" XXX
SG_ ESP_Passiv_getastet : 61|1@1+ (1,0) [0|0] "" XXX
SG_ ASR_Steuerger_t : 60|1@1+ (1,0) [0|0] "" XXX
SG_ Zaehler_Bremse_1 : 56|4@1+ (1,0) [0|15] "" XXX
SG_ COUNTER : 56|4@1+ (1,0) [0|15] "" XXX
SG_ MSR_Eingriffsmoment : 48|8@1+ (0.39,0) [0|99.06] "MDI" XXX
SG_ ASR_Eingriffsmoment_schnell : 40|8@1+ (0.39,0) [0|99.06] "MDI" XXX
SG_ ASR_Eingriffsmoment_langsam : 32|8@1+ (0.39,0) [0|99.06] "MDI" XXX
@ -981,8 +985,8 @@ BO_ 1360 Airbag_2: 2 XXX
SG_ Checksumme_Airbag_2__reserviert : 0|8@1+ (1,0) [0|0] "" XXX
BO_ 80 Airbag_1: 4 XXX
SG_ Checksumme_Airbag_1 : 24|8@1+ (1,0) [0|0] "" XXX
SG_ Zaehler_Airbag_1 : 20|4@1+ (1,0) [0|15] "" XXX
SG_ CHECKSUM : 24|8@1+ (1,0) [0|0] "" XXX
SG_ COUNTER : 20|4@1+ (1,0) [0|15] "" XXX
SG_ Fehlerspeichereintrag : 19|1@1+ (1,0) [0|0] "" XXX
SG_ Frei_Airbag_1_2 : 18|1@1+ (1,0) [0|0] "" XXX
SG_ Airbag_im_Stellgliedtest : 17|1@1+ (1,0) [0|0] "" XXX
@ -1084,7 +1088,7 @@ BO_ 872 ACC_System: 8 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_ 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
@ -1102,12 +1106,12 @@ BO_ 1386 ACC_GRA_Anziege: 8 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
SG_ COUNTER : 60|4@1+ (1,0) [0|15] "" XXX
BO_ 208 Lenkhilfe_3: 6 XXX
SG_ LH3_Checksumme : 0|8@1+ (1,0) [0|255] "" XXX
SG_ CHECKSUM : 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@1+ (1,0) [0|15] "" XXX
SG_ COUNTER : 12|4@1+ (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
@ -1118,8 +1122,8 @@ BO_ 208 Lenkhilfe_3: 6 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_ CHECKSUM : 0|8@1+ (1,0) [0|255] "" XXX
SG_ COUNTER : 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
@ -1131,8 +1135,8 @@ BO_ 978 Lenkhilfe_2: 8 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_ CHECKSUM : 0|8@1+ (1,0) [0|15] "" XXX
SG_ COUNTER : 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
@ -1172,16 +1176,22 @@ BO_ 870 AWV: 5 XXX
SG_ AWV_Zaehler : 8|4@1+ (1,0) [0|15] "" Bremsbooster
SG_ AWV_Checksumme : 0|8@1+ (1,0) [0|255] "" Bremsbooster
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_ 1470 LDW_Status: 8 XXX
SG_ LDW_Lernmodus_rechts : 0|2@1+ (1,0) [0|3] "" XXX
SG_ LDW_Lernmodus_links : 2|2@1+ (1,0) [0|3] "" XXX
SG_ LDW_Lernmodus : 9|3@1+ (1,0) [0|3] "" XXX
SG_ LDW_Textbits : 12|4@1+ (1,0) [0|15] "" XXX
SG_ LDW_Gong : 16|2@1+ (1,0) [0|3] "" XXX
SG_ LDW_Kameratyp : 18|1@1+ (1,0) [0|1] "" XXX
SG_ LDW_Lampe_gelb : 19|1@1+ (1,0) [0|1] "" XXX
SG_ LDW_Lampe_gruen : 20|1@1+ (1,0) [0|1] "" XXX
SG_ LDW_SW_Warnung_links : 21|1@1+ (1,0) [0|1] "" XXX
SG_ LDW_SW_Warnung_rechts : 22|1@1+ (1,0) [0|1] "" XXX
SG_ LDW_KD_Fehler : 23|1@1+ (1,0) [0|1] "" XXX
SG_ LDW_DLC : 24|8@1+ (0.01,-1.25) [-1.25|1.25] "" XXX
SG_ LDW_TLC : 32|5@1+ (0.1,0) [0|3] "" XXX
SG_ LDW_Seite_DLCTLC : 37|1@1+ (1,0) [0|1] "" XXX
SG_ LDW_Frueh_Spaet : 38|2@1+ (1,0) [0|3] "" XXX
BO_ 428 Bremse_8: 8 XXX
SG_ BR8_Checksumme : 0|8@1+ (1,0) [0|255] "" XXX
@ -1461,6 +1471,12 @@ CM_ SG_ 896 Drosselklappenpoti "Throttle Position";
CM_ SG_ 896 Fahrpedal_Rohsignal "Accelerator Pedal Position";
CM_ SG_ 896 Ansauglufttemperatur "Intake Air Temperature";
CM_ SG_ 912 GK1_Fa_Tuerkont "Status of the driver's door rotary latch";
CM_ SG_ 912 BSK_HL_geoeffnet "Status of the rear left door rotary latch";
CM_ SG_ 912 BSK_HR_geoeffnet "Status of the rear right door rotary latch";
CM_ SG_ 912 BSK_BT_geoeffnet "Status of the passenger door rotary latch";
CM_ SG_ 912 BSK_HD_Hauptraste "Status of trunk lid main detent";
CM_ SG_ 1088 Zaehler_Getriebe_1 "Counter Getriebe_1";
CM_ SG_ 1088 Waehlhebelposition__Getriebe_1_ "Gear Selector Position";