...
Drive button has been pressed (neutral state)
Power state is POWER_MAIN (neutral state)
Speed state is stationary Activate Pre-charge, it is successful (or we are already charged(speed >= 0) (neutral state)
Get precharge state (state 1)
if state is down (not charged) go to state 2
else go to state 3 (is charged)
Turn on Pre-charge and get ack (state 2)
Transmit REVERSE state to MCI, receive ACK (state 3)
If either step fails, return to neutral
Neutral → Reverse
Drive button has been pressed (neutral state)
Power state is POWER_MAIN (neutral state)
Speed state is stationary (speed <= 0) (neutral state)
Get precharge state (state 1)
if state is down (not charged) go to state 2
else go to state 3 (is charged)
Turn on Pre-charge is successful (or we are already chargedand get ack (state 2)
Transmit REVERSE state to MCI, receive ACK (state 3)
Drive → Neutral
Neutral button or force (sent by power fsm) or drive_state != main (drive state)
Transmit NEUTRAL state to MCI, receive ACK (state 1)
Reverse → Neutral
Neutral button or force (sent by power fsm) or drive_state != main (drive state)
Transmit NEUTRAL state to MCI, receive ACK (state 1)
Centre Console Communications:
...