diff --git a/board/drivers/can.h b/board/drivers/can.h index 3a6eefa..2ca7cbc 100644 --- a/board/drivers/can.h +++ b/board/drivers/can.h @@ -34,6 +34,7 @@ bool can_pop(can_ring *q, CAN_FIFOMailBox_TypeDef *elem); // Ignition detected from CAN meessages bool ignition_can = false; +bool ignition_cadillac = false; uint32_t ignition_can_cnt = 0U; // end API @@ -353,10 +354,17 @@ void ignition_can_hook(CAN_FIFOMailBox_TypeDef *to_push) { ignition_can_cnt = 0U; // reset counter if (bus == 0) { + // TODO: verify on all supported GM models that we can reliably detect ignition using only this signal, + // since the 0x1F1 signal can briefly go low immediately after ignition + if ((addr == 0x160) && (len == 5)) { + // this message isn't all zeros when ignition is on + ignition_cadillac = GET_BYTES_04(to_push) != 0; + } // GM exception if ((addr == 0x1F1) && (len == 8)) { - //Bit 5 is ignition "on" - ignition_can = (GET_BYTE(to_push, 0) & 0x20) != 0; + // Bit 5 is ignition "on" + bool ignition_gm = ((GET_BYTE(to_push, 0) & 0x20) != 0); + ignition_can = ignition_gm || ignition_cadillac; } // Tesla exception if ((addr == 0x348) && (len == 8)) {