GCC Code Coverage Report


Directory: ./
File: firmware/controllers/trigger/decoders/trigger_chrysler.cpp
Date: 2025-10-03 00:57:22
Coverage Exec Excl Total
Lines: 54.3% 251 0 462
Functions: 90.9% 10 0 11
Branches: 92.9% 13 0 14
Decisions: 92.9% 13 - 14

Line Branch Decision Exec Source
1 /**
2 * @file trigger_chrysler.cpp
3 *
4 * @date Mar 24, 2014
5 * @author Andrey Belomutskiy, (c) 2012-2020
6 */
7
8 #include "pch.h"
9
10 #include "trigger_chrysler.h"
11 #include "trigger_universal.h"
12
13 2 void initDodgeRam(TriggerWaveform *s) {
14
15 2 s->initialize(FOUR_STROKE_CAM_SENSOR, SyncEdge::Rise);
16
17 2 s->isSynchronizationNeeded = false;
18
19 2 addSkippedToothTriggerEvents(TriggerWheel::T_SECONDARY, s, 8, 0, 0.06, -25, 360, 0, 720);
20
21 2 s->addEvent720(360, TriggerValue::RISE, TriggerWheel::T_PRIMARY);
22
23 2 addSkippedToothTriggerEvents(TriggerWheel::T_SECONDARY, s, 8, 0, 0.06, 360 - 25, 360, 0, 720);
24
25 2 s->addEvent720(720, TriggerValue::FALL, TriggerWheel::T_PRIMARY);
26 2 }
27
28 void configureNeon2003TriggerWaveformCrank(TriggerWaveform *s) {
29 s->initialize(FOUR_STROKE_CRANK_SENSOR, SyncEdge::RiseOnly);
30
31 s->setTriggerSynchronizationGap(3);
32
33 s->addEvent360(25, TriggerValue::FALL, TriggerWheel::T_PRIMARY);
34 s->addEvent360(30, TriggerValue::RISE, TriggerWheel::T_PRIMARY);
35 s->addEvent360(35, TriggerValue::FALL, TriggerWheel::T_PRIMARY);
36 s->addEvent360(40, TriggerValue::RISE, TriggerWheel::T_PRIMARY);
37 s->addEvent360(45, TriggerValue::FALL, TriggerWheel::T_PRIMARY);
38 s->addEvent360(50, TriggerValue::RISE, TriggerWheel::T_PRIMARY);
39 s->addEvent360(55, TriggerValue::FALL, TriggerWheel::T_PRIMARY);
40 s->addEvent360(60, TriggerValue::RISE, TriggerWheel::T_PRIMARY);
41 s->addEvent360(65, TriggerValue::FALL, TriggerWheel::T_PRIMARY);
42 s->addEvent360(70, TriggerValue::RISE, TriggerWheel::T_PRIMARY);
43 s->addEvent360(75, TriggerValue::FALL, TriggerWheel::T_PRIMARY);
44 s->addEvent360(80, TriggerValue::RISE, TriggerWheel::T_PRIMARY);
45 s->addEvent360(85, TriggerValue::FALL, TriggerWheel::T_PRIMARY);
46 s->addEvent360(90, TriggerValue::RISE, TriggerWheel::T_PRIMARY);
47 s->addEvent360(95, TriggerValue::FALL, TriggerWheel::T_PRIMARY);
48 s->addEvent360(100, TriggerValue::RISE, TriggerWheel::T_PRIMARY);
49 s->addEvent360(105, TriggerValue::FALL, TriggerWheel::T_PRIMARY);
50 s->addEvent360(110, TriggerValue::RISE, TriggerWheel::T_PRIMARY);
51 s->addEvent360(115, TriggerValue::FALL, TriggerWheel::T_PRIMARY);
52 s->addEvent360(120, TriggerValue::RISE, TriggerWheel::T_PRIMARY);
53 s->addEvent360(125, TriggerValue::FALL, TriggerWheel::T_PRIMARY);
54 s->addEvent360(130, TriggerValue::RISE, TriggerWheel::T_PRIMARY);
55 s->addEvent360(135, TriggerValue::FALL, TriggerWheel::T_PRIMARY);
56 s->addEvent360(140, TriggerValue::RISE, TriggerWheel::T_PRIMARY);
57 s->addEvent360(145,TriggerValue::FALL, TriggerWheel::T_PRIMARY);
58 s->addEvent360(150, TriggerValue::RISE, TriggerWheel::T_PRIMARY);
59 s->addEvent360(155, TriggerValue::FALL, TriggerWheel::T_PRIMARY);
60 s->addEvent360(160, TriggerValue::RISE, TriggerWheel::T_PRIMARY);
61 s->addEvent360(165, TriggerValue::FALL, TriggerWheel::T_PRIMARY);
62 s->addEvent360(170, TriggerValue::RISE, TriggerWheel::T_PRIMARY);
63 s->addEvent360(175, TriggerValue::FALL, TriggerWheel::T_PRIMARY);
64 s->addEvent360(180, TriggerValue::RISE, TriggerWheel::T_PRIMARY);
65 s->addEvent360(185, TriggerValue::FALL, TriggerWheel::T_PRIMARY);
66 // gap 25
67 s->addEvent360(210, TriggerValue::RISE, TriggerWheel::T_PRIMARY);
68 s->addEvent360(215, TriggerValue::FALL, TriggerWheel::T_PRIMARY);
69 s->addEvent360(220, TriggerValue::RISE, TriggerWheel::T_PRIMARY);
70 s->addEvent360(225, TriggerValue::FALL, TriggerWheel::T_PRIMARY);
71 s->addEvent360(230, TriggerValue::RISE, TriggerWheel::T_PRIMARY);
72 s->addEvent360(235, TriggerValue::FALL, TriggerWheel::T_PRIMARY);
73 s->addEvent360(240, TriggerValue::RISE, TriggerWheel::T_PRIMARY);
74 s->addEvent360(245, TriggerValue::FALL, TriggerWheel::T_PRIMARY);
75 s->addEvent360(250, TriggerValue::RISE, TriggerWheel::T_PRIMARY);
76 s->addEvent360(255, TriggerValue::FALL, TriggerWheel::T_PRIMARY);
77 s->addEvent360(260, TriggerValue::RISE, TriggerWheel::T_PRIMARY);
78 s->addEvent360(265, TriggerValue::FALL, TriggerWheel::T_PRIMARY);
79 s->addEvent360(270, TriggerValue::RISE, TriggerWheel::T_PRIMARY);
80 s->addEvent360(275, TriggerValue::FALL, TriggerWheel::T_PRIMARY);
81 s->addEvent360(280, TriggerValue::RISE, TriggerWheel::T_PRIMARY);
82 s->addEvent360(285, TriggerValue::FALL, TriggerWheel::T_PRIMARY);
83 s->addEvent360(290, TriggerValue::RISE, TriggerWheel::T_PRIMARY);
84 s->addEvent360(295, TriggerValue::FALL, TriggerWheel::T_PRIMARY);
85 s->addEvent360(300, TriggerValue::RISE, TriggerWheel::T_PRIMARY);
86 s->addEvent360(305, TriggerValue::FALL, TriggerWheel::T_PRIMARY);
87 s->addEvent360(310, TriggerValue::RISE, TriggerWheel::T_PRIMARY);
88 s->addEvent360(315, TriggerValue::FALL, TriggerWheel::T_PRIMARY);
89 s->addEvent360(320, TriggerValue::RISE, TriggerWheel::T_PRIMARY);
90 s->addEvent360(325, TriggerValue::FALL, TriggerWheel::T_PRIMARY);
91 s->addEvent360(330, TriggerValue::RISE, TriggerWheel::T_PRIMARY);
92 s->addEvent360(335, TriggerValue::FALL, TriggerWheel::T_PRIMARY);
93 s->addEvent360(340, TriggerValue::RISE, TriggerWheel::T_PRIMARY);
94 s->addEvent360(345, TriggerValue::FALL, TriggerWheel::T_PRIMARY);
95 s->addEvent360(350, TriggerValue::RISE, TriggerWheel::T_PRIMARY);
96 s->addEvent360(355, TriggerValue::FALL, TriggerWheel::T_PRIMARY);
97 s->addEvent360(360, TriggerValue::RISE, TriggerWheel::T_PRIMARY);
98 }
99
100 5 void configureNeon2003TriggerWaveformCam(TriggerWaveform *s) {
101 // todo: move sync point so that two channel does not have false trigger issues
102 5 bool useOnlyPrimary = true;
103
104 5 s->initialize(FOUR_STROKE_CAM_SENSOR, SyncEdge::Rise);
105
106 5 s->tdcPosition = 496;
107
108 /**
109 * ratio sequence is:
110 gap=2.17/1.46
111 gap=0.33/2.17
112 gap=1.06/0.33
113 gap=2.73/1.06
114 gap=0.47/2.73
115 gap=0.71/0.47
116 gap=1.43/0.71
117 *
118 */
119
120 // these values only work well for 'useFronOnly' mode!!!
121 5 s->setTriggerSynchronizationGap2(0.75, 1.5);
122 5 s->setTriggerSynchronizationGap3(1, 0.65, 1.25);
123
124 5 float EPS_ANGLE = 0.3;
125
126
127
1/2
✓ Branch 0 taken 5 times.
✗ Branch 1 not taken.
1/2
✓ Decision 'true' taken 5 times.
✗ Decision 'false' not taken.
5 if (useOnlyPrimary) {
128 5 s->addEvent720(144, TriggerValue::RISE, TriggerWheel::T_PRIMARY);
129 5 s->addEvent720(180, TriggerValue::FALL, TriggerWheel::T_PRIMARY);
130
131 5 s->addEvent720(216, TriggerValue::RISE, TriggerWheel::T_PRIMARY);
132 5 s->addEvent720(252, TriggerValue::FALL, TriggerWheel::T_PRIMARY);
133
134 5 s->addEvent720(288, TriggerValue::RISE, TriggerWheel::T_PRIMARY);
135 5 s->addEvent720(324, TriggerValue::FALL, TriggerWheel::T_PRIMARY);
136
137 5 s->addEvent720(360, TriggerValue::RISE, TriggerWheel::T_PRIMARY); // width = 144
138 5 s->addEvent720(504, TriggerValue::FALL, TriggerWheel::T_PRIMARY); // width = 36
139 5 s->addEvent720(540, TriggerValue::RISE, TriggerWheel::T_PRIMARY);
140 5 s->addEvent720(576, TriggerValue::FALL, TriggerWheel::T_PRIMARY);
141 5 s->addEvent720(612, TriggerValue::RISE, TriggerWheel::T_PRIMARY);
142 5 s->addEvent720(648, TriggerValue::FALL, TriggerWheel::T_PRIMARY);
143 5 s->addEvent720(684, TriggerValue::RISE, TriggerWheel::T_PRIMARY);
144 5 s->addEvent720(720, TriggerValue::FALL, TriggerWheel::T_PRIMARY);
145
146 } else {
147 /**
148 * 7 primary (four narrow + one wide + two narrow)
149 * 64 secondary (one wide + 15 narrow + 16 narrow + one wide + 15 narrow + 16 narrow)
150 *
151 */
152
153 s->useOnlyPrimaryForSync = true;
154
155 s->addEvent720(25, TriggerValue::FALL, TriggerWheel::T_SECONDARY);
156 s->addEvent720(30, TriggerValue::RISE, TriggerWheel::T_SECONDARY);
157 s->addEvent720(35, TriggerValue::FALL, TriggerWheel::T_SECONDARY);
158 s->addEvent720(40, TriggerValue::RISE, TriggerWheel::T_SECONDARY);
159 s->addEvent720(45, TriggerValue::FALL, TriggerWheel::T_SECONDARY);
160 s->addEvent720(50, TriggerValue::RISE, TriggerWheel::T_SECONDARY);
161 s->addEvent720(55, TriggerValue::FALL, TriggerWheel::T_SECONDARY);
162 s->addEvent720(60, TriggerValue::RISE, TriggerWheel::T_SECONDARY);
163 s->addEvent720(65, TriggerValue::FALL, TriggerWheel::T_SECONDARY);
164 s->addEvent720(70, TriggerValue::RISE, TriggerWheel::T_SECONDARY);
165 s->addEvent720(75, TriggerValue::FALL, TriggerWheel::T_SECONDARY);
166 s->addEvent720(80, TriggerValue::RISE, TriggerWheel::T_SECONDARY);
167 s->addEvent720(85, TriggerValue::FALL, TriggerWheel::T_SECONDARY);
168 s->addEvent720(90, TriggerValue::RISE, TriggerWheel::T_SECONDARY);
169 s->addEvent720(95, TriggerValue::FALL, TriggerWheel::T_SECONDARY);
170 s->addEvent720(100, TriggerValue::RISE, TriggerWheel::T_SECONDARY);
171 s->addEvent720(105, TriggerValue::FALL, TriggerWheel::T_SECONDARY);
172 s->addEvent720(110, TriggerValue::RISE, TriggerWheel::T_SECONDARY);
173 s->addEvent720(115, TriggerValue::FALL, TriggerWheel::T_SECONDARY);
174 s->addEvent720(120, TriggerValue::RISE, TriggerWheel::T_SECONDARY);
175 s->addEvent720(125, TriggerValue::FALL, TriggerWheel::T_SECONDARY);
176 s->addEvent720(130, TriggerValue::RISE, TriggerWheel::T_SECONDARY);
177 s->addEvent720(135, TriggerValue::FALL, TriggerWheel::T_SECONDARY);
178 s->addEvent720(140, TriggerValue::RISE, TriggerWheel::T_SECONDARY);
179
180 s->addEvent720(144, TriggerValue::RISE, TriggerWheel::T_PRIMARY);
181
182 s->addEvent720(145,TriggerValue::FALL, TriggerWheel::T_SECONDARY);
183 s->addEvent720(150, TriggerValue::RISE, TriggerWheel::T_SECONDARY);
184 s->addEvent720(155, TriggerValue::FALL, TriggerWheel::T_SECONDARY);
185 s->addEvent720(160, TriggerValue::RISE, TriggerWheel::T_SECONDARY);
186 s->addEvent720(165, TriggerValue::FALL, TriggerWheel::T_SECONDARY);
187 s->addEvent720(170, TriggerValue::RISE, TriggerWheel::T_SECONDARY);
188 s->addEvent720(175, TriggerValue::FALL, TriggerWheel::T_SECONDARY);
189 s->addEvent720(180 - EPS_ANGLE, TriggerValue::RISE, TriggerWheel::T_SECONDARY);
190
191 s->addEvent720(180, TriggerValue::FALL, TriggerWheel::T_PRIMARY);
192
193 s->addEvent720(185, TriggerValue::FALL, TriggerWheel::T_SECONDARY);
194 s->addEvent720(210, TriggerValue::RISE, TriggerWheel::T_SECONDARY);
195 s->addEvent720(215, TriggerValue::FALL, TriggerWheel::T_SECONDARY);
196
197 s->addEvent720(216, TriggerValue::RISE, TriggerWheel::T_PRIMARY);
198
199 s->addEvent720(220, TriggerValue::RISE, TriggerWheel::T_SECONDARY);
200 s->addEvent720(225, TriggerValue::FALL, TriggerWheel::T_SECONDARY);
201 s->addEvent720(230, TriggerValue::RISE, TriggerWheel::T_SECONDARY);
202 s->addEvent720(235, TriggerValue::FALL, TriggerWheel::T_SECONDARY);
203 s->addEvent720(240, TriggerValue::RISE, TriggerWheel::T_SECONDARY);
204 s->addEvent720(245, TriggerValue::FALL, TriggerWheel::T_SECONDARY);
205 s->addEvent720(250, TriggerValue::RISE, TriggerWheel::T_SECONDARY);
206
207 s->addEvent720(252, TriggerValue::FALL, TriggerWheel::T_PRIMARY);
208
209 s->addEvent720(255, TriggerValue::FALL, TriggerWheel::T_SECONDARY);
210
211 s->addEvent720(260, TriggerValue::RISE, TriggerWheel::T_SECONDARY);
212 s->addEvent720(265, TriggerValue::FALL, TriggerWheel::T_SECONDARY);
213 s->addEvent720(270, TriggerValue::RISE, TriggerWheel::T_SECONDARY);
214 s->addEvent720(275, TriggerValue::FALL, TriggerWheel::T_SECONDARY);
215 s->addEvent720(280, TriggerValue::RISE, TriggerWheel::T_SECONDARY);
216 s->addEvent720(285, TriggerValue::FALL, TriggerWheel::T_SECONDARY);
217
218 s->addEvent720(288, TriggerValue::RISE, TriggerWheel::T_PRIMARY);
219
220 s->addEvent720(290, TriggerValue::RISE, TriggerWheel::T_SECONDARY);
221 s->addEvent720(295, TriggerValue::FALL, TriggerWheel::T_SECONDARY);
222 s->addEvent720(300, TriggerValue::RISE, TriggerWheel::T_SECONDARY);
223 s->addEvent720(305, TriggerValue::FALL, TriggerWheel::T_SECONDARY);
224 s->addEvent720(310, TriggerValue::RISE, TriggerWheel::T_SECONDARY);
225 s->addEvent720(315, TriggerValue::FALL, TriggerWheel::T_SECONDARY);
226 s->addEvent720(320, TriggerValue::RISE, TriggerWheel::T_SECONDARY);
227
228 s->addEvent720(324, TriggerValue::FALL, TriggerWheel::T_PRIMARY);
229
230 s->addEvent720(325, TriggerValue::FALL, TriggerWheel::T_SECONDARY);
231 s->addEvent720(330, TriggerValue::RISE, TriggerWheel::T_SECONDARY);
232 s->addEvent720(335, TriggerValue::FALL, TriggerWheel::T_SECONDARY);
233 s->addEvent720(340, TriggerValue::RISE, TriggerWheel::T_SECONDARY);
234 s->addEvent720(345, TriggerValue::FALL, TriggerWheel::T_SECONDARY);
235 s->addEvent720(350, TriggerValue::RISE, TriggerWheel::T_SECONDARY);
236 s->addEvent720(355, TriggerValue::FALL, TriggerWheel::T_SECONDARY);
237 s->addEvent720(360 - EPS_ANGLE, TriggerValue::RISE, TriggerWheel::T_SECONDARY);
238
239 s->addEvent720(360, TriggerValue::RISE, TriggerWheel::T_PRIMARY);
240
241 s->addEvent720(385, TriggerValue::FALL, TriggerWheel::T_SECONDARY);
242 s->addEvent720(390, TriggerValue::RISE, TriggerWheel::T_SECONDARY);
243 s->addEvent720(395, TriggerValue::FALL, TriggerWheel::T_SECONDARY);
244 s->addEvent720(400, TriggerValue::RISE, TriggerWheel::T_SECONDARY);
245 s->addEvent720(405, TriggerValue::FALL, TriggerWheel::T_SECONDARY);
246 s->addEvent720(410, TriggerValue::RISE, TriggerWheel::T_SECONDARY);
247 s->addEvent720(415, TriggerValue::FALL, TriggerWheel::T_SECONDARY);
248 s->addEvent720(420, TriggerValue::RISE, TriggerWheel::T_SECONDARY);
249 s->addEvent720(425, TriggerValue::FALL, TriggerWheel::T_SECONDARY);
250 s->addEvent720(430, TriggerValue::RISE, TriggerWheel::T_SECONDARY);
251 s->addEvent720(435, TriggerValue::FALL, TriggerWheel::T_SECONDARY);
252 s->addEvent720(440, TriggerValue::RISE, TriggerWheel::T_SECONDARY);
253 s->addEvent720(445, TriggerValue::FALL, TriggerWheel::T_SECONDARY);
254 s->addEvent720(450, TriggerValue::RISE, TriggerWheel::T_SECONDARY);
255 s->addEvent720(455, TriggerValue::FALL, TriggerWheel::T_SECONDARY);
256 s->addEvent720(460, TriggerValue::RISE, TriggerWheel::T_SECONDARY);
257 s->addEvent720(465, TriggerValue::FALL, TriggerWheel::T_SECONDARY);
258 s->addEvent720(470, TriggerValue::RISE, TriggerWheel::T_SECONDARY);
259 s->addEvent720(475, TriggerValue::FALL, TriggerWheel::T_SECONDARY);
260 s->addEvent720(480, TriggerValue::RISE, TriggerWheel::T_SECONDARY);
261 s->addEvent720(485, TriggerValue::FALL, TriggerWheel::T_SECONDARY);
262 s->addEvent720(490, TriggerValue::RISE, TriggerWheel::T_SECONDARY);
263 s->addEvent720(495, TriggerValue::FALL, TriggerWheel::T_SECONDARY);
264 s->addEvent720(500, TriggerValue::RISE, TriggerWheel::T_SECONDARY);
265
266 s->addEvent720(504, TriggerValue::FALL, TriggerWheel::T_PRIMARY);
267
268 s->addEvent720(505, TriggerValue::FALL, TriggerWheel::T_SECONDARY);
269 s->addEvent720(510, TriggerValue::RISE, TriggerWheel::T_SECONDARY);
270 s->addEvent720(515, TriggerValue::FALL, TriggerWheel::T_SECONDARY);
271 s->addEvent720(520, TriggerValue::RISE, TriggerWheel::T_SECONDARY);
272 s->addEvent720(525, TriggerValue::FALL, TriggerWheel::T_SECONDARY);
273 s->addEvent720(530, TriggerValue::RISE, TriggerWheel::T_SECONDARY);
274 s->addEvent720(535, TriggerValue::FALL, TriggerWheel::T_SECONDARY);
275 s->addEvent720(540 - EPS_ANGLE, TriggerValue::RISE, TriggerWheel::T_SECONDARY);
276
277 s->addEvent720(540, TriggerValue::RISE, TriggerWheel::T_PRIMARY);
278
279 s->addEvent720(545, TriggerValue::FALL, TriggerWheel::T_SECONDARY);
280 s->addEvent720(570, TriggerValue::RISE, TriggerWheel::T_SECONDARY);
281 s->addEvent720(575, TriggerValue::FALL, TriggerWheel::T_SECONDARY);
282
283 s->addEvent720(576, TriggerValue::FALL, TriggerWheel::T_PRIMARY);
284 s->addEvent720(580, TriggerValue::RISE, TriggerWheel::T_SECONDARY);
285 s->addEvent720(585, TriggerValue::FALL, TriggerWheel::T_SECONDARY);
286 s->addEvent720(590, TriggerValue::RISE, TriggerWheel::T_SECONDARY);
287 s->addEvent720(595, TriggerValue::FALL, TriggerWheel::T_SECONDARY);
288 s->addEvent720(600, TriggerValue::RISE, TriggerWheel::T_SECONDARY);
289 s->addEvent720(605, TriggerValue::FALL, TriggerWheel::T_SECONDARY);
290 s->addEvent720(610, TriggerValue::RISE, TriggerWheel::T_SECONDARY);
291
292 s->addEvent720(612, TriggerValue::RISE, TriggerWheel::T_PRIMARY);
293 s->addEvent720(615, TriggerValue::FALL, TriggerWheel::T_SECONDARY);
294 s->addEvent720(620, TriggerValue::RISE, TriggerWheel::T_SECONDARY);
295 s->addEvent720(625, TriggerValue::FALL, TriggerWheel::T_SECONDARY);
296 s->addEvent720(630, TriggerValue::RISE, TriggerWheel::T_SECONDARY);
297 s->addEvent720(635, TriggerValue::FALL, TriggerWheel::T_SECONDARY);
298 s->addEvent720(640, TriggerValue::RISE, TriggerWheel::T_SECONDARY);
299 s->addEvent720(645, TriggerValue::FALL, TriggerWheel::T_SECONDARY);
300
301 s->addEvent720(648, TriggerValue::FALL, TriggerWheel::T_PRIMARY);
302 s->addEvent720(650, TriggerValue::RISE, TriggerWheel::T_SECONDARY);
303 s->addEvent720(655, TriggerValue::FALL, TriggerWheel::T_SECONDARY);
304 s->addEvent720(660, TriggerValue::RISE, TriggerWheel::T_SECONDARY);
305 s->addEvent720(665, TriggerValue::FALL, TriggerWheel::T_SECONDARY);
306 s->addEvent720(670, TriggerValue::RISE, TriggerWheel::T_SECONDARY);
307 s->addEvent720(675, TriggerValue::FALL, TriggerWheel::T_SECONDARY);
308 s->addEvent720(680, TriggerValue::RISE, TriggerWheel::T_SECONDARY);
309
310 s->addEvent720(684, TriggerValue::RISE, TriggerWheel::T_PRIMARY);
311 s->addEvent720(685, TriggerValue::FALL, TriggerWheel::T_SECONDARY);
312 s->addEvent720(690, TriggerValue::RISE, TriggerWheel::T_SECONDARY);
313 s->addEvent720(695, TriggerValue::FALL, TriggerWheel::T_SECONDARY);
314 s->addEvent720(700, TriggerValue::RISE, TriggerWheel::T_SECONDARY);
315 s->addEvent720(705, TriggerValue::FALL, TriggerWheel::T_SECONDARY);
316 s->addEvent720(710, TriggerValue::RISE, TriggerWheel::T_SECONDARY);
317 s->addEvent720(715, TriggerValue::FALL, TriggerWheel::T_SECONDARY);
318 s->addEvent720(720 - EPS_ANGLE, TriggerValue::RISE, TriggerWheel::T_SECONDARY);
319 s->addEvent720(720, TriggerValue::FALL, TriggerWheel::T_PRIMARY);
320 }
321 5 }
322
323 1 void configureDodgeStratusTriggerWaveform(TriggerWaveform *s) {
324 1 s->initialize(FOUR_STROKE_CAM_SENSOR, SyncEdge::RiseOnly);
325 1 s->tdcPosition = 150;
326
327 1 float w = 7;
328 1 float g = 20;
329 1 s->setTriggerSynchronizationGap2(CHRYSLER_NGC6_GAP - 0.25,
330 CHRYSLER_NGC6_GAP + 0.4);
331
332 1 float base = 0;
333 // 2 teeth
334 1 float angle = base + 120.0 - w;
335 1 s->addEvent720(angle, TriggerValue::RISE, TriggerWheel::T_PRIMARY);
336 1 s->addEvent720(angle + w, TriggerValue::FALL, TriggerWheel::T_PRIMARY);
337 1 angle += g;
338 1 s->addEvent720(angle, TriggerValue::RISE, TriggerWheel::T_PRIMARY);
339 1 s->addEvent720(angle + w, TriggerValue::FALL, TriggerWheel::T_PRIMARY);
340
341 1 base += 120;
342 // 3 teeth
343 1 angle = base + 120.0 - w;
344 1 s->addEvent720(angle, TriggerValue::RISE, TriggerWheel::T_PRIMARY);
345 1 s->addEvent720(angle + w, TriggerValue::FALL, TriggerWheel::T_PRIMARY);
346 1 angle += g;
347 1 s->addEvent720(angle, TriggerValue::RISE, TriggerWheel::T_PRIMARY);
348 1 s->addEvent720(angle + w, TriggerValue::FALL, TriggerWheel::T_PRIMARY);
349 1 angle += g;
350 1 s->addEvent720(angle, TriggerValue::RISE, TriggerWheel::T_PRIMARY);
351 1 s->addEvent720(angle + w, TriggerValue::FALL, TriggerWheel::T_PRIMARY);
352
353 1 base += 120;
354 // 2 teeth
355 1 angle = base + 120.0 - w;
356 1 s->addEvent720(angle, TriggerValue::RISE, TriggerWheel::T_PRIMARY);
357 1 s->addEvent720(angle + w, TriggerValue::FALL, TriggerWheel::T_PRIMARY);
358 1 angle += g;
359 1 s->addEvent720(angle, TriggerValue::RISE, TriggerWheel::T_PRIMARY);
360 1 s->addEvent720(angle + w, TriggerValue::FALL, TriggerWheel::T_PRIMARY);
361
362 1 base += 120;
363 // just one
364 1 angle = base + 120.0 - w;
365 1 s->addEvent720(angle, TriggerValue::RISE, TriggerWheel::T_PRIMARY);
366 1 s->addEvent720(angle + w, TriggerValue::FALL, TriggerWheel::T_PRIMARY);
367
368 1 base += 120;
369 // 3 teeth
370 1 angle = base + 120.0 - w;
371 1 s->addEvent720(angle, TriggerValue::RISE, TriggerWheel::T_PRIMARY);
372 1 s->addEvent720(angle + w, TriggerValue::FALL, TriggerWheel::T_PRIMARY);
373 1 angle += g;
374 1 s->addEvent720(angle, TriggerValue::RISE, TriggerWheel::T_PRIMARY);
375 1 s->addEvent720(angle + w, TriggerValue::FALL, TriggerWheel::T_PRIMARY);
376 1 angle += g;
377 1 s->addEvent720(angle, TriggerValue::RISE, TriggerWheel::T_PRIMARY);
378 1 s->addEvent720(angle + w, TriggerValue::FALL, TriggerWheel::T_PRIMARY);
379
380 1 base += 120;
381 // just one again
382 1 angle = base + 120.0 - w;
383 1 s->addEvent720(angle, TriggerValue::RISE, TriggerWheel::T_PRIMARY);
384 1 s->addEvent720(angle + w, TriggerValue::FALL, TriggerWheel::T_PRIMARY);
385 1 }
386
387 6 void configureNeon1995TriggerWaveformOnlyCrank(TriggerWaveform *s) {
388 6 s->initialize(FOUR_STROKE_CRANK_SENSOR, SyncEdge::Rise);
389
390 // Nominal gap 3.25
391 6 s->setTriggerSynchronizationGap3(0, 1.6, 4.5);
392
393 // Nominal gap 1.0
394 6 s->setTriggerSynchronizationGap3(1, 0.5, 1.5);
395 6 s->setTriggerSynchronizationGap3(2, 0.5, 1.5);
396
397 // Nominal gap 0.168
398 6 s->setTriggerSynchronizationGap3(3, 0.1, 0.3);
399
400 6 s->tdcPosition = 279;
401
402 // voodoo magic - we always need 720 at the end
403 6 int base = 59;
404
405 6 s->addEvent360(base + 0, TriggerValue::RISE, TriggerWheel::T_PRIMARY);
406 6 s->addEvent360(base + 60, TriggerValue::FALL, TriggerWheel::T_PRIMARY);
407 6 s->addEvent360(base + 75, TriggerValue::RISE, TriggerWheel::T_PRIMARY);
408 6 s->addEvent360(base + 82, TriggerValue::FALL, TriggerWheel::T_PRIMARY);
409 6 s->addEvent360(base + 96, TriggerValue::RISE, TriggerWheel::T_PRIMARY);
410 6 s->addEvent360(base + 102, TriggerValue::FALL, TriggerWheel::T_PRIMARY);
411 6 s->addEvent360(base + 116, TriggerValue::RISE, TriggerWheel::T_PRIMARY);
412 6 s->addEvent360(base + 122, TriggerValue::FALL, TriggerWheel::T_PRIMARY);
413
414 6 s->addEvent360(base + 235, TriggerValue::RISE, TriggerWheel::T_PRIMARY);
415 6 s->addEvent360(base + 242, TriggerValue::FALL, TriggerWheel::T_PRIMARY);
416 6 s->addEvent360(base + 255, TriggerValue::RISE, TriggerWheel::T_PRIMARY);
417 6 s->addEvent360(base + 261, TriggerValue::FALL, TriggerWheel::T_PRIMARY);
418 6 s->addEvent360(base + 275, TriggerValue::RISE, TriggerWheel::T_PRIMARY);
419 6 s->addEvent360(base + 281, TriggerValue::FALL, TriggerWheel::T_PRIMARY);
420 6 s->addEvent360(base + 295, TriggerValue::RISE, TriggerWheel::T_PRIMARY);
421 6 s->addEvent360(base + 301, TriggerValue::FALL, TriggerWheel::T_PRIMARY);
422 6 }
423
424 1 void initJeep18_2_2_2(TriggerWaveform *s) {
425 1 s->initialize(FOUR_STROKE_CAM_SENSOR, SyncEdge::RiseOnly);
426 1 s->isSynchronizationNeeded = false;
427 1 s->tdcPosition = 581;
428
429 1 float off = 212;
430
431 1 s->addEvent720(534 - 720 + off, TriggerValue::RISE, TriggerWheel::T_SECONDARY);
432 1 s->addEvent720(536 - 720 + off, TriggerValue::FALL, TriggerWheel::T_SECONDARY);
433 1 s->addEvent720(554 - 720 + off, TriggerValue::RISE, TriggerWheel::T_SECONDARY);
434 1 s->addEvent720(556 - 720 + off, TriggerValue::FALL, TriggerWheel::T_SECONDARY);
435 1 s->addEvent720(574 - 720 + off, TriggerValue::RISE, TriggerWheel::T_SECONDARY);
436 1 s->addEvent720(576 - 720 + off, TriggerValue::FALL, TriggerWheel::T_SECONDARY);
437 1 s->addEvent720(594 - 720 + off, TriggerValue::RISE, TriggerWheel::T_SECONDARY);
438 1 s->addEvent720(596 - 720 + off, TriggerValue::FALL, TriggerWheel::T_SECONDARY);
439
440 1 s->addEvent720(654 - 720 + off, TriggerValue::RISE, TriggerWheel::T_SECONDARY);
441 1 s->addEvent720(656 - 720 + off, TriggerValue::FALL, TriggerWheel::T_SECONDARY);
442 1 s->addEvent720(674 - 720 + off, TriggerValue::RISE, TriggerWheel::T_SECONDARY);
443 1 s->addEvent720(676 - 720 + off, TriggerValue::FALL, TriggerWheel::T_SECONDARY);
444 1 s->addEvent720(694 - 720 + off, TriggerValue::RISE, TriggerWheel::T_SECONDARY);
445 1 s->addEvent720(696 - 720 + off, TriggerValue::FALL, TriggerWheel::T_SECONDARY);
446 1 s->addEvent720(714 - 720 + off, TriggerValue::RISE, TriggerWheel::T_SECONDARY);
447 1 s->addEvent720(716 - 720 + off, TriggerValue::FALL, TriggerWheel::T_SECONDARY);
448
449
450 1 s->addEvent720(54 + off, TriggerValue::RISE, TriggerWheel::T_SECONDARY);
451 1 s->addEvent720(56 + off, TriggerValue::FALL, TriggerWheel::T_SECONDARY);
452 1 s->addEvent720(74 + off, TriggerValue::RISE, TriggerWheel::T_SECONDARY);
453 1 s->addEvent720(76 + off, TriggerValue::FALL, TriggerWheel::T_SECONDARY);
454 1 s->addEvent720(94 + off, TriggerValue::RISE, TriggerWheel::T_SECONDARY);
455 1 s->addEvent720(96 + off, TriggerValue::FALL, TriggerWheel::T_SECONDARY);
456 1 s->addEvent720(114 + off, TriggerValue::RISE, TriggerWheel::T_SECONDARY);
457 1 s->addEvent720(116 + off, TriggerValue::FALL, TriggerWheel::T_SECONDARY);
458
459 1 s->addEvent720(148 + off, TriggerValue::RISE, TriggerWheel::T_PRIMARY); // 360
460
461 1 s->addEvent720(174 + off, TriggerValue::RISE, TriggerWheel::T_SECONDARY);
462 1 s->addEvent720(176 + off, TriggerValue::FALL, TriggerWheel::T_SECONDARY);
463 1 s->addEvent720(194 + off, TriggerValue::RISE, TriggerWheel::T_SECONDARY);
464 1 s->addEvent720(196 + off, TriggerValue::FALL, TriggerWheel::T_SECONDARY);
465 1 s->addEvent720(214 + off, TriggerValue::RISE, TriggerWheel::T_SECONDARY);
466 1 s->addEvent720(216 + off, TriggerValue::FALL, TriggerWheel::T_SECONDARY);
467 1 s->addEvent720(234 + off, TriggerValue::RISE, TriggerWheel::T_SECONDARY);
468 1 s->addEvent720(236 + off, TriggerValue::FALL, TriggerWheel::T_SECONDARY);
469
470 1 s->addEvent720(294 + off, TriggerValue::RISE, TriggerWheel::T_SECONDARY);
471 1 s->addEvent720(296 + off, TriggerValue::FALL, TriggerWheel::T_SECONDARY);
472 1 s->addEvent720(314 + off, TriggerValue::RISE, TriggerWheel::T_SECONDARY);
473 1 s->addEvent720(316 + off, TriggerValue::FALL, TriggerWheel::T_SECONDARY);
474 1 s->addEvent720(334 + off, TriggerValue::RISE, TriggerWheel::T_SECONDARY);
475 1 s->addEvent720(336 + off, TriggerValue::FALL, TriggerWheel::T_SECONDARY);
476 1 s->addEvent720(354 + off, TriggerValue::RISE, TriggerWheel::T_SECONDARY);
477 1 s->addEvent720(356 + off, TriggerValue::FALL, TriggerWheel::T_SECONDARY);
478
479 1 s->addEvent720(414 + off, TriggerValue::RISE, TriggerWheel::T_SECONDARY);
480 1 s->addEvent720(416 + off, TriggerValue::FALL, TriggerWheel::T_SECONDARY);
481 1 s->addEvent720(434 + off, TriggerValue::RISE, TriggerWheel::T_SECONDARY);
482 1 s->addEvent720(436 + off, TriggerValue::FALL, TriggerWheel::T_SECONDARY);
483 1 s->addEvent720(454 + off, TriggerValue::RISE, TriggerWheel::T_SECONDARY);
484 1 s->addEvent720(456 + off, TriggerValue::FALL, TriggerWheel::T_SECONDARY);
485 1 s->addEvent720(474 + off, TriggerValue::RISE, TriggerWheel::T_SECONDARY);
486 1 s->addEvent720(476 + off, TriggerValue::FALL, TriggerWheel::T_SECONDARY);
487
488 1 s->addEvent720(508 + off, TriggerValue::FALL, TriggerWheel::T_PRIMARY); // 720
489
490 1 }
491
492 4 static void add4cylblock(int off, TriggerWaveform *s) {
493 4 s->addEvent720(114 + off, TriggerValue::RISE, TriggerWheel::T_SECONDARY);
494 4 s->addEvent720(114 + off + 2, TriggerValue::FALL, TriggerWheel::T_SECONDARY);
495
496 4 s->addEvent720(134 + off, TriggerValue::RISE, TriggerWheel::T_SECONDARY);
497 4 s->addEvent720(134 + off + 2, TriggerValue::FALL, TriggerWheel::T_SECONDARY);
498
499 4 s->addEvent720(154 + off, TriggerValue::RISE, TriggerWheel::T_SECONDARY);
500 4 s->addEvent720(154 + off + 2, TriggerValue::FALL, TriggerWheel::T_SECONDARY);
501
502 4 s->addEvent720(174 + off, TriggerValue::RISE, TriggerWheel::T_SECONDARY);
503 4 s->addEvent720(174 + off + 2, TriggerValue::FALL, TriggerWheel::T_SECONDARY);
504 4 }
505
506 // TT_JEEP_4_CYL
507 1 void initJeep_XJ_4cyl_2500(TriggerWaveform *s) {
508 1 s->initialize(FOUR_STROKE_CAM_SENSOR, SyncEdge::RiseOnly);
509 1 s->isSynchronizationNeeded = false;
510 1 s->tdcPosition = 720 - 236;
511
512 1 float offset = 124;
513
514 1 add4cylblock(offset - 180, s);
515 1 add4cylblock(offset, s);
516
517 1 s->addEvent720(236 + offset, TriggerValue::RISE, TriggerWheel::T_PRIMARY); // 360
518
519 1 add4cylblock(offset + 180, s);
520 1 add4cylblock(offset + 360, s);
521
522 1 s->addEvent720(596 + offset, TriggerValue::FALL, TriggerWheel::T_PRIMARY); // 720
523
524 1 }
525
526 1 void configureChryslerNGC_36_2_2(TriggerWaveform *s) {
527 1 s->initialize(FOUR_STROKE_CAM_SENSOR, SyncEdge::RiseOnly);
528
529 1 float wide = 30 * 2;
530 1 float narrow = 10 * 2;
531
532 1 s->setTriggerSynchronizationGap(3.5);
533
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 = 1; i < 15; i++) {
534 14 s->setTriggerSynchronizationGap4(/*gapIndex*/i, 1);
535 }
536 1 s->setTriggerSynchronizationGap4(/*gapIndex*/15, 0.4);
537
538 1 float base = 0;
539
540
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 < 14; i++) {
541 14 s->addEventAngle(base + narrow / 2, TriggerValue::RISE, TriggerWheel::T_PRIMARY);
542 14 s->addEventAngle(base + narrow, TriggerValue::FALL, TriggerWheel::T_PRIMARY);
543 14 base += narrow;
544 }
545
546 1 s->addEventAngle(base + narrow / 2, TriggerValue::RISE, TriggerWheel::T_PRIMARY);
547 1 base += narrow / 2;
548 1 s->addEventAngle(base + wide, TriggerValue::FALL, TriggerWheel::T_PRIMARY);
549 1 base += wide;
550
551
2/2
✓ Branch 0 taken 16 times.
✓ Branch 1 taken 1 time.
2/2
✓ Decision 'true' taken 16 times.
✓ Decision 'false' taken 1 time.
17 for (int i = 0; i < 16; i++) {
552 16 s->addEventAngle(base + narrow / 2, TriggerValue::RISE, TriggerWheel::T_PRIMARY);
553 16 s->addEventAngle(base + narrow, TriggerValue::FALL, TriggerWheel::T_PRIMARY);
554 16 base += narrow;
555 }
556
557 // one small tooth at the end of the engine cycle
558 1 s->addEventAngle(s->getCycleDuration() - narrow / 2, TriggerValue::RISE, TriggerWheel::T_PRIMARY);
559 1 s->addEventAngle(s->getCycleDuration(), TriggerValue::FALL, TriggerWheel::T_PRIMARY);
560 1 }
561
562 3 void configureJeepEVD_36_2_2(TriggerWaveform *s) {
563 3 s->initialize(FOUR_STROKE_CRANK_SENSOR, SyncEdge::RiseOnly);
564
565 3 float wide = 15 * 2;
566 3 float narrow = 5 * 2;
567
568 /* Last falling edge before big gap */
569 3 s->tdcPosition = 13.5 * narrow;
570
571 3 s->setTriggerSynchronizationGap3(/*gapIndex*/0, 0.2, 0.6);
572 3 s->setTriggerSynchronizationGap3(/*gapIndex*/1, 2.2, 3.8);
573
574
2/2
✓ Branch 0 taken 45 times.
✓ Branch 1 taken 3 times.
2/2
✓ Decision 'true' taken 45 times.
✓ Decision 'false' taken 3 times.
48 for (int i = 2; i < 17; i++) {
575 45 s->setTriggerSynchronizationGap3(/*gapIndex*/i, 0.7, 1.6);
576 }
577
578 /* Starting with big gap */
579 3 float base = wide - narrow / 2;
580
581
2/2
✓ Branch 0 taken 48 times.
✓ Branch 1 taken 3 times.
2/2
✓ Decision 'true' taken 48 times.
✓ Decision 'false' taken 3 times.
51 for (int i = 0; i < 16; i++) {
582 48 s->addEventAngle(base, TriggerValue::RISE, TriggerWheel::T_PRIMARY);
583 48 s->addEventAngle(base + narrow / 2, TriggerValue::FALL, TriggerWheel::T_PRIMARY);
584 48 base += narrow;
585 }
586
587 /* Big tooth */
588 3 s->addEventAngle(base, TriggerValue::RISE, TriggerWheel::T_PRIMARY);
589 3 s->addEventAngle(base + wide - narrow / 2, TriggerValue::FALL, TriggerWheel::T_PRIMARY);
590 3 base += wide;
591
592
2/2
✓ Branch 0 taken 45 times.
✓ Branch 1 taken 3 times.
2/2
✓ Decision 'true' taken 45 times.
✓ Decision 'false' taken 3 times.
48 for (int i = 0; i < 15; i++) {
593 45 s->addEventAngle(base, TriggerValue::RISE, TriggerWheel::T_PRIMARY);
594 45 s->addEventAngle(base + narrow / 2, TriggerValue::FALL, TriggerWheel::T_PRIMARY);
595 45 base += narrow;
596 }
597 3 }
598
599 1 void configureChryslerVtt15(TriggerWaveform *s) {
600 1 s->initialize(FOUR_STROKE_CAM_SENSOR, SyncEdge::RiseOnly);
601 1 int width = 5;
602
603 1 s->addToothRiseFall(37 + width, width);
604 1 s->addToothRiseFall(47 + width, width);
605
606 1 s->addToothRiseFall(81 + width, width);
607 1 s->addToothRiseFall(93 + width, width);
608 1 s->addToothRiseFall(105 + width, width);
609
610 1 s->addToothRiseFall(129 + width, width);
611 1 s->addToothRiseFall(139 + width, width);
612
613 1 s->addToothRiseFall(174 + width, width);
614 1 s->addToothRiseFall(186 + width, width);
615
616 1 s->addToothRiseFall(211 + width, width);
617
618 1 s->addToothRiseFall(265 + width, width);
619 1 s->addToothRiseFall(276 + width, width);
620 1 s->addToothRiseFall(286 + width, width);
621
622 1 s->addToothRiseFall(309 + width, width);
623
624 1 s->addToothRiseFall(360, width);
625
626 1 s->setTriggerSynchronizationGap4(/*gapIndex*/0, 2.16);
627 1 s->setTriggerSynchronizationGap4(/*gapIndex*/1, 2.08);
628 1 s->setTriggerSynchronizationGap4(/*gapIndex*/2, 0.34);
629 1 }
630