feat: add src/fusion.cpp

This commit is contained in:
2026-09-25 11:56:52 +08:00
parent 017df1a938
commit 1f56132bb6

23
src/fusion.cpp Normal file
View File

@@ -0,0 +1,23 @@
#include "fusion.hpp"
#include <cmath>
FusionResult fuse(const ChannelAssessment& primary, const ChannelAssessment& secondary) {
bool a = primary.state == ChannelState::Healthy;
bool b = secondary.state == ChannelState::Healthy;
if (!a && !b) return {FusionState::Unavailable, std::nullopt, "none"};
if (a && !b) return {FusionState::Degraded, primary.reading.celsius, primary.reading.channel};
if (!a && b) return {FusionState::Degraded, secondary.reading.celsius, secondary.reading.channel};
if (std::abs(primary.reading.celsius - secondary.reading.celsius) > 3.0)
return {FusionState::Conflict, std::nullopt, "conflict"};
return {FusionState::Nominal, (primary.reading.celsius + secondary.reading.celsius) / 2.0, "dual"};
}
const char* state_name(FusionState state) {
switch (state) {
case FusionState::Nominal: return "nominal";
case FusionState::Degraded: return "degraded";
case FusionState::Conflict: return "conflict";
case FusionState::Unavailable: return "unavailable";
}
return "unknown";
}