GCC Code Coverage Report


Directory: ./
File: firmware/controllers/trigger/decoders/trigger_honda.cpp
Date: 2025-10-03 00:57:22
Coverage Exec Excl Total
Lines: 100.0% 58 0 58
Functions: 100.0% 5 0 5
Branches: 100.0% 8 0 8
Decisions: 100.0% 8 - 8

Line Branch Decision Exec Source
1 /*
2 * @file trigger_honda.cpp
3 *
4 * @date May 27, 2016
5 * @author Andrey Belomutskiy, (c) 2012-2020
6 */
7
8 #include "pch.h"
9
10 #include "trigger_honda.h"
11 #include "trigger_universal.h"
12
13 2 void configureHondaCbr600(TriggerWaveform *s) {
14 2 s->initialize(FOUR_STROKE_CAM_SENSOR, SyncEdge::RiseOnly);
15
16 2 s->tdcPosition = 0; // todo: hard-code TDC position once we know it
17 2 s->setTriggerSynchronizationGap2(/*from*/3.9, /*to*/8);
18
19 2 s->addEvent720(350.0f, TriggerValue::FALL);
20 2 s->addEvent720(360.0f, TriggerValue::RISE);
21
22 2 s->addEvent720(650.0f, TriggerValue::FALL);
23 2 s->addEvent720(660.0f, TriggerValue::RISE);
24
25 2 s->addEvent720(710.0f, TriggerValue::FALL);
26 2 s->addEvent720(720.0f, TriggerValue::RISE);
27 2 }
28
29 // TT_HONDA_K_CRANK_12_1
30 6 void configureHondaK_12_1(TriggerWaveform *s) {
31 6 s->initialize(FOUR_STROKE_CRANK_SENSOR, SyncEdge::RiseOnly);
32
33 // nominal gap 0.33
34 6 s->setSecondTriggerSynchronizationGap2(0.2f, 0.7f);
35 // nominal gap 2.0
36 6 s->setTriggerSynchronizationGap2(1.1f, 2.4f);
37
38 6 int count = 12;
39 6 float tooth = 360 / count; // hint: tooth = 30
40
41 // for VR we only handle rises so width does not matter much
42 6 int width = 4;
43
44 // Extra "+1" tooth happens 1/3 of the way between first two teeth
45 6 s->addToothRiseFall(tooth / 3, width);
46
47
2/2
✓ Branch 0 taken 72 times.
✓ Branch 1 taken 6 times.
2/2
✓ Decision 'true' taken 72 times.
✓ Decision 'false' taken 6 times.
78 for (int i = 1; i <= count; i++) {
48 72 s->addToothRiseFall(tooth * i, width);
49 }
50 6 }
51
52 /**
53 * Exhaust cam shaft, not variable on Honda K
54 * 2003 Honda Element
55 */
56 2 void configureHondaK_4_1(TriggerWaveform *s) {
57 2 s->initialize(FOUR_STROKE_CAM_SENSOR, SyncEdge::RiseOnly);
58
59 2 s->setTriggerSynchronizationGap3(/*gapIndex*/0, 1.5, 4.5); // nominal 2.27
60 2 s->setTriggerSynchronizationGap3(/*gapIndex*/1, 0.1, 0.5); // nominal 0.28
61
62 2 angle_t end = 70.5;
63 2 int w = 15;
64 2 s->addToothRiseFall(end + 90 * 0, w);
65 2 s->addToothRiseFall(end + 90 * 1, w);
66 2 s->addToothRiseFall(end + 90 * 2, w);
67 2 s->addToothRiseFall(end + 90 * 3, w);
68
69 2 s->addToothRiseFall(360, 7);
70 2 }
71
72 1 void initialize_one_of_24_2_2(TriggerWaveform *s, int firstCount, int secondCount) {
73 1 s->initialize(FOUR_STROKE_CRANK_SENSOR, SyncEdge::RiseOnly);
74
75 1 float narrow = 360 / 24;
76 1 float wide = narrow * 2;
77
78 1 float base = 0;
79
80
2/2
✓ Branch 0 taken 6 times.
✓ Branch 1 taken 1 time.
2/2
✓ Decision 'true' taken 6 times.
✓ Decision 'false' taken 1 time.
7 for (int i = 0; i < firstCount; i++) {
81 6 s->addToothFallRise(base + narrow, narrow / 2);
82 6 base += narrow;
83 }
84
85 1 s->addToothFallRise(base + wide, wide / 2);
86 1 base += wide;
87
88
2/2
✓ Branch 0 taken 14 times.
✓ Branch 1 taken 1 time.
2/2
✓ Decision 'true' taken 14 times.
✓ Decision 'false' taken 1 time.
15 for (int i = 0; i < secondCount; i++) {
89 14 s->addToothFallRise(base + narrow, narrow / 2);
90 14 base += narrow;
91 }
92
93 1 s->addToothFallRise(360, narrow/2);
94 1 }
95
96 1 void configureHondaJ30A2_24_1_1(TriggerWaveform *s) {
97 1 initialize_one_of_24_2_2(s, 6, 14);
98
99 1 size_t count = 6;
100
101 1 s->tdcPosition = 0;
102
103 1 s->setTriggerSynchronizationGap3(/*gapIndex*/0, 1.6, 4);
104
2/2
✓ Branch 0 taken 5 times.
✓ Branch 1 taken 1 time.
2/2
✓ Decision 'true' taken 5 times.
✓ Decision 'false' taken 1 time.
6 for (size_t i = 1 ; i < count ; i++) {
105 5 s->setTriggerSynchronizationGap3(/*gapIndex*/i, 0.65, 1.4);
106 }
107 1 s->setTriggerSynchronizationGap3(/*gapIndex*/count, 0.2, 0.55);
108 1 }
109