diff --git a/panda b/panda index 0f4cd5c26b..9ce223d4f9 160000 --- a/panda +++ b/panda @@ -1 +1 @@ -Subproject commit 0f4cd5c26bc87f091116b07aeff23624385c827d +Subproject commit 9ce223d4f9b40bc99b2a7b2c4f5349981acd4783 diff --git a/selfdrive/boardd/boardd.cc b/selfdrive/boardd/boardd.cc index 7cae1c7419..45d4f64388 100644 --- a/selfdrive/boardd/boardd.cc +++ b/selfdrive/boardd/boardd.cc @@ -466,7 +466,7 @@ void panda_state_thread(PubMaster *pm, std::vector pandas, bool spoofin util::set_thread_name("boardd_panda_state"); Params params; - SubMaster sm({"controlsState"}); + SubMaster sm({"controlsState", "carState"}); Panda *peripheral_panda = pandas[0]; bool is_onroad = false; @@ -526,9 +526,11 @@ void panda_state_thread(PubMaster *pm, std::vector pandas, bool spoofin sm.update(0); const bool engaged = sm.allAliveAndValid({"controlsState"}) && sm["controlsState"].getControlsState().getEnabled(); + const bool parked = sm.allAliveAndValid({"carState"}) && (int(sm["carState"].getCarState().getGearShifter()) == 1); for (const auto &panda : pandas) { panda->send_heartbeat(engaged); + panda->parked_heartbeat(parked); } uint64_t dt = nanos_since_boot() - start_time; diff --git a/selfdrive/boardd/panda.cc b/selfdrive/boardd/panda.cc index 1e7b510eca..32933fa692 100644 --- a/selfdrive/boardd/panda.cc +++ b/selfdrive/boardd/panda.cc @@ -163,6 +163,10 @@ void Panda::send_heartbeat(bool engaged) { handle->control_write(0xf3, engaged, 0); } +void Panda::parked_heartbeat(bool parked) { + handle->control_write(0xff, parked, 0); +} + void Panda::set_can_speed_kbps(uint16_t bus, uint16_t speed) { handle->control_write(0xde, bus, (speed * 10)); } diff --git a/selfdrive/boardd/panda.h b/selfdrive/boardd/panda.h index 69df2e2b66..2566282d0e 100644 --- a/selfdrive/boardd/panda.h +++ b/selfdrive/boardd/panda.h @@ -76,6 +76,7 @@ public: void set_power_saving(bool power_saving); void enable_deepsleep(); void send_heartbeat(bool engaged); + void parked_heartbeat(bool parked); void set_can_speed_kbps(uint16_t bus, uint16_t speed); void set_data_speed_kbps(uint16_t bus, uint16_t speed); void set_canfd_non_iso(uint16_t bus, bool non_iso);