From bbdce92c168469db03e45ef13fe083fa6b9a90e2 Mon Sep 17 00:00:00 2001 From: Willem Melching Date: Thu, 9 Apr 2020 13:42:33 -0700 Subject: [PATCH] Populate health.faults from panda health packet old-commit-hash: f718ceafd51b71a8f16e2fee2ada141965a2e492 --- cereal | 2 +- selfdrive/boardd/boardd.cc | 13 +++++++++++++ 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/cereal b/cereal index 975a633b86..c8e5db830d 160000 --- a/cereal +++ b/cereal @@ -1 +1 @@ -Subproject commit 975a633b863ae35263b2171bbcb2c5074a8f28ca +Subproject commit c8e5db830d30e5ea0d0abef0479d9c48cfd24504 diff --git a/selfdrive/boardd/boardd.cc b/selfdrive/boardd/boardd.cc index 65334e0872..383471f2d3 100644 --- a/selfdrive/boardd/boardd.cc +++ b/selfdrive/boardd/boardd.cc @@ -29,6 +29,7 @@ #include "messaging.hpp" #include +#include // double the FIFO size #define RECV_SIZE (0x1000) @@ -514,6 +515,18 @@ void can_health(PubSocket *publisher) { healthData.setFaultStatus(cereal::HealthData::FaultStatus(health.fault_status)); healthData.setPowerSaveEnabled((bool)(health.power_save_enabled)); + // Convert faults bitset to capnp list + std::bitset<32> fault_bits(health.faults); + auto faults = healthData.initFaults(fault_bits.count()); + + size_t i = 0; + for (size_t f = size_t(cereal::HealthData::FaultType::RELAY_MALFUNCTION); + f <= size_t(cereal::HealthData::FaultType::REGISTER_DIVERGENT); f++){ + if (fault_bits.test(f)) { + faults.set(i, cereal::HealthData::FaultType(f)); + i++; + } + } // send to health auto words = capnp::messageToFlatArray(msg); auto bytes = words.asBytes();