GCC Code Coverage Report


Directory: ./
File: firmware/controllers/engine_cycle/knock_logic.h
Date: 2025-10-03 00:57:22
Coverage Exec Excl Total
Lines: 100.0% 3 0 3
Functions: 100.0% 1 0 1
Branches: 100.0% 2 0 2
Decisions: -% 0 - 0

Line Branch Decision Exec Source
1 /*
2 * @file knock_logic.h
3 *
4 * @date Apr 04, 2021
5 * @author Andrey Gusakov
6 */
7
8 #pragma once
9
10 #include "peak_detect.h"
11 #include "knock_controller_generated.h"
12
13 int getCylinderKnockBank(uint8_t cylinderNumber);
14
15 #define bore2frequency(bore) (900 / (CONST_PI * (bore) / 2))
16
17 class KnockControllerBase : public EngineModule, public knock_controller_s {
18 public:
19
2/2
✓ Branch 2 taken 7491 times.
✓ Branch 3 taken 681 times.
8172 KnockControllerBase() {
20 // start with threshold higher than any possible knock to avoid recording spurious knocks
21 681 m_knockThreshold = 100;
22 681 }
23 // EngineModule implementation
24 void onFastCallback() override;
25
26 // onKnockSenseCompleted is the callback from the knock sense driver to report a sensed knock level
27 void onKnockSenseCompleted(uint8_t cylinderNumber, float dbv, efitick_t lastKnockTime);
28
29 float getFuelTrimMultiplier() const;
30 float getKnockRetard() const;
31 uint32_t getKnockCount() const;
32
33 virtual float getKnockThreshold() const = 0;
34 virtual float getMaximumRetard() const = 0;
35
36 private:
37 using PD = PeakDetect<float, MS2NT(50)>;
38 PD peakDetectors[MAX_CYLINDER_COUNT];
39 PD allCylinderPeakDetector;
40 };
41
42 class KnockController : public KnockControllerBase {
43 public:
44 float getKnockThreshold() const override;
45 float getMaximumRetard() const override;
46 };
47