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();