You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
53 lines
1.5 KiB
53 lines
1.5 KiB
// BUS 0 is on the LKAS module (ASCM) side
|
|
// BUS 2 is on the actuator (EPS) side
|
|
|
|
static int gm_ascm_fwd_hook(int bus_num, CAN_FIFOMailBox_TypeDef *to_fwd) {
|
|
|
|
uint32_t addr = to_fwd->RIR>>21;
|
|
|
|
if (bus_num == 0) {
|
|
|
|
// do not propagate lkas messages from ascm to actuators
|
|
// block 0x152 and 0x154, which are the lkas command from ASCM1 and ASCM2
|
|
// block 0x315 and 0x2cb, which are the brake and accel commands from ASCM1
|
|
//if ((addr == 0x152) || (addr == 0x154) || (addr == 0x315) || (addr == 0x2cb)) {
|
|
if ((addr == 0x152) || (addr == 0x154)) {
|
|
int supercruise_on = (to_fwd->RDHR>>4) & 0x1; // bit 36
|
|
if (!supercruise_on) return -1;
|
|
}
|
|
|
|
// on the chassis bus, the OBDII port is on the module side, so we need to read
|
|
// the lkas messages sent by openpilot (put on unused 0x151 ane 0x153 addrs) and send it to
|
|
// the actuator as 0x152 and 0x154
|
|
if (addr == 0x151) {
|
|
to_fwd->RIR = (0x152 << 21) | (to_fwd->RIR & 0x1fffff);
|
|
}
|
|
if (addr == 0x153) {
|
|
to_fwd->RIR = (0x154 << 21) | (to_fwd->RIR & 0x1fffff);
|
|
}
|
|
|
|
// brake
|
|
if (addr == 0x314) {
|
|
to_fwd->RIR = (0x315 << 21) | (to_fwd->RIR & 0x1fffff);
|
|
}
|
|
|
|
return 2;
|
|
}
|
|
|
|
if (bus_num == 2) {
|
|
return 0;
|
|
}
|
|
|
|
return -1;
|
|
}
|
|
|
|
const safety_hooks gm_ascm_hooks = {
|
|
.init = nooutput_init,
|
|
.rx = default_rx_hook,
|
|
.tx = alloutput_tx_hook,
|
|
.tx_lin = nooutput_tx_lin_hook,
|
|
.ignition = default_ign_hook,
|
|
.fwd = gm_ascm_fwd_hook,
|
|
.relay = nooutput_relay_hook,
|
|
};
|
|
|
|
|