rusEFI
The most advanced open source ECU
Loading...
Searching...
No Matches
controllers
algo
engine_cylinder.cpp
Go to the documentation of this file.
1
/*
2
* @file engine_cylinder.cpp
3
*
4
* @date: may 25, 2025
5
* @author Matthew Kennedy, FDSoftware
6
*/
7
#include "
pch.h
"
8
#include "
engine_cylinder.hpp
"
9
10
void
OneCylinder::updateCylinderNumber
(uint8_t index, uint8_t cylinderNumber) {
11
m_cylinderIndex
= index;
12
m_cylinderNumber
= cylinderNumber;
13
14
// base = position of this cylinder in the firing order.
15
// We get a cylinder every n-th of an engine cycle where N is the number of cylinders
16
m_baseAngleOffset
=
engine
->
engineState
.
engineCycle
* index /
engineConfiguration
->cylindersCount;
17
18
m_valid
=
true
;
19
}
20
21
void
OneCylinder::invalidCylinder
() {
22
m_valid
=
false
;
23
}
24
25
angle_t
OneCylinder::getAngleOffset
()
const
{
26
if
(!
m_valid
) {
27
return
0;
28
}
29
30
// Plus or minus any adjustment if this is an odd-fire engine
31
auto
adjustment =
engineConfiguration
->timing_offset_cylinder[
m_cylinderNumber
];
32
33
auto
result =
m_baseAngleOffset
+ adjustment;
34
35
assertAngleRange(result,
"getAngleOffset"
,
ObdCode::CUSTOM_ERR_CYL_ANGLE
);
36
37
return
result;
38
}
39
40
void
EngineCylinders::updateCylinders
() {
41
// Update valid cylinders with their position in the firing order
42
uint16_t cylinderUpdateMask = 0;
43
for
(
size_t
i = 0; i <
engineConfiguration
->cylindersCount; i++) {
44
auto
cylinderNumber =
getCylinderNumberAtIndex
(i);
45
46
engine
->
cylinders
[cylinderNumber].
updateCylinderNumber
(i, cylinderNumber);
47
48
auto
mask = 1 << cylinderNumber;
49
// Assert that this cylinder was not configured yet
50
efiAssertVoid(
ObdCode::OBD_PCM_Processor_Fault
, (cylinderUpdateMask & mask) == 0,
"cylinder update err"
);
51
cylinderUpdateMask |= mask;
52
}
53
54
// Assert that all cylinders were configured
55
uint16_t expectedMask = (1 << (
engineConfiguration
->cylindersCount)) - 1;
56
efiAssertVoid(
ObdCode::OBD_PCM_Processor_Fault
, cylinderUpdateMask == expectedMask,
"cylinder update err"
);
57
58
// Invalidate the remaining cylinders
59
for
(
size_t
i =
engineConfiguration
->cylindersCount; i < efi::size(
engine
->
cylinders
); i++) {
60
engine
->
cylinders
[i].
invalidCylinder
();
61
}
62
}
Engine::engineState
EngineState engineState
Definition
engine.h:344
Engine::cylinders
OneCylinder cylinders[MAX_CYLINDER_COUNT]
Definition
engine.h:291
EngineState::engineCycle
angle_t engineCycle
Definition
engine_state.h:27
OneCylinder::getAngleOffset
angle_t getAngleOffset() const
Definition
engine_cylinder.cpp:25
OneCylinder::m_cylinderIndex
uint8_t m_cylinderIndex
Definition
engine_cylinder.hpp:31
OneCylinder::m_valid
bool m_valid
Definition
engine_cylinder.hpp:28
OneCylinder::invalidCylinder
void invalidCylinder()
Definition
engine_cylinder.cpp:21
OneCylinder::updateCylinderNumber
void updateCylinderNumber(uint8_t index, uint8_t cylinderNumber)
Definition
engine_cylinder.cpp:10
OneCylinder::m_cylinderNumber
uint8_t m_cylinderNumber
Definition
engine_cylinder.hpp:33
OneCylinder::m_baseAngleOffset
angle_t m_baseAngleOffset
Definition
engine_cylinder.hpp:36
float
engine
static EngineAccessor engine
Definition
engine.h:413
engineConfiguration
static constexpr engine_configuration_s * engineConfiguration
Definition
engine_configuration.h:81
engine_cylinder.hpp
getCylinderNumberAtIndex
size_t getCylinderNumberAtIndex(size_t cylinderIndex)
Definition
firing_order.cpp:229
EngineCylinders::updateCylinders
void updateCylinders(void)
Definition
engine_cylinder.cpp:40
ObdCode::OBD_PCM_Processor_Fault
@ OBD_PCM_Processor_Fault
ObdCode::CUSTOM_ERR_CYL_ANGLE
@ CUSTOM_ERR_CYL_ANGLE
pch.h
Generated on Fri Dec 12 2025 01:56:09 for rusEFI by
1.9.8