diff --git a/cereal b/cereal index 18f1e4824..85e1e2f79 160000 --- a/cereal +++ b/cereal @@ -1 +1 @@ -Subproject commit 18f1e4824434482c1eaf48a73d33544fb789a83b +Subproject commit 85e1e2f79cffc4df307e29b118a76adc4226b52f diff --git a/panda b/panda index f96514621..e99d41e6c 160000 --- a/panda +++ b/panda @@ -1 +1 @@ -Subproject commit f96514621435928a7f843172d78db0115d50c813 +Subproject commit e99d41e6cf43ecb6bdc69f190532493d270f19aa diff --git a/selfdrive/boardd/boardd.cc b/selfdrive/boardd/boardd.cc index afe0859d7..e52c8d2e6 100644 --- a/selfdrive/boardd/boardd.cc +++ b/selfdrive/boardd/boardd.cc @@ -379,6 +379,7 @@ void panda_state_thread(bool spoofing_started) { ps.setFanSpeedRpm(fan_speed_rpm); ps.setFaultStatus(cereal::PandaState::FaultStatus(pandaState.fault_status)); ps.setPowerSaveEnabled((bool)(pandaState.power_save_enabled)); + ps.setHeartbeatLost((bool)(pandaState.heartbeat_lost)); ps.setHarnessStatus(cereal::PandaState::HarnessStatus(pandaState.car_harness_status)); // Convert faults bitset to capnp list diff --git a/selfdrive/boardd/panda.h b/selfdrive/boardd/panda.h index c10e3d995..92bd7fcf2 100644 --- a/selfdrive/boardd/panda.h +++ b/selfdrive/boardd/panda.h @@ -36,6 +36,7 @@ struct __attribute__((packed)) health_t { int16_t safety_param; uint8_t fault_status; uint8_t power_save_enabled; + uint8_t heartbeat_lost; }; diff --git a/selfdrive/pandad.py b/selfdrive/pandad.py index 2eda33630..27e3aa261 100755 --- a/selfdrive/pandad.py +++ b/selfdrive/pandad.py @@ -77,13 +77,19 @@ def update_panda() -> None: cloudlog.info("Version mismatch after flashing, exiting") raise AssertionError - cloudlog.info("Resetting panda") - panda.reset() - def main() -> None: update_panda() + # check heatlh for lost heartbeat + panda = Panda() + health = panda.health() + if health["heartbeat_lost"]: + cloudlog.event("heartbeat lost", deviceState=health) + + cloudlog.info("Resetting panda") + panda.reset() + os.chdir(os.path.join(BASEDIR, "selfdrive/boardd")) os.execvp("./boardd", ["./boardd"])