GCC Code Coverage Report


Directory: ./
File: firmware/controllers/sensors/redundant_sensor.cpp
Date: 2025-10-03 00:57:22
Coverage Exec Excl Total
Lines: 100.0% 19 0 19
Functions: 100.0% 3 0 3
Branches: 100.0% 10 0 10
Decisions: 100.0% 6 - 6

Line Branch Decision Exec Source
1 #include "pch.h"
2
3 #include "redundant_sensor.h"
4
5 14 RedundantSensor::RedundantSensor(SensorType outputType, SensorType first, SensorType second)
6 : Sensor(outputType)
7 14 , m_first(first)
8 14 , m_second(second)
9 {
10 14 }
11
12 29 void RedundantSensor::configure(float /*split threshold*/maxDifference, bool ignoreSecondSensor) {
13 29 m_maxDifference = maxDifference;
14 29 m_ignoreSecond = ignoreSecondSensor;
15 29 }
16
17 222 SensorResult RedundantSensor::get() const {
18
1/1
✓ Branch 2 taken 222 times.
222 auto sensor1 = Sensor::get(m_first);
19
20 // If we're set to disable redundancy, just pass thru the first sensor
21
2/2
✓ Branch 0 taken 8 times.
✓ Branch 1 taken 214 times.
2/2
✓ Decision 'true' taken 8 times.
✓ Decision 'false' taken 214 times.
222 if (m_ignoreSecond) {
22 8 return sensor1;
23 }
24
25
1/1
✓ Branch 1 taken 214 times.
214 auto sensor2 = Sensor::get(m_second);
26
27 // If either result is invalid, return invalid.
28
4/4
✓ Branch 0 taken 8 times.
✓ Branch 1 taken 206 times.
✓ Branch 2 taken 2 times.
✓ Branch 3 taken 6 times.
2/2
✓ Decision 'true' taken 208 times.
✓ Decision 'false' taken 6 times.
214 if (!sensor1.Valid || !sensor2.Valid) {
29 208 return UnexpectedCode::Inconsistent;
30 }
31
32 // If both are valid, check that they're near one another
33 6 float delta = absF(sensor1.Value - sensor2.Value);
34
2/2
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 4 times.
2/2
✓ Decision 'true' taken 2 times.
✓ Decision 'false' taken 4 times.
6 if (delta > m_maxDifference) {
35 2 return UnexpectedCode::Inconsistent;
36 }
37
38 // Both sensors are valid, and their readings are close. All is well.
39 // Return the average
40 4 return (sensor1.Value + sensor2.Value) / 2;
41 }
42