rusEFI
The most advanced open source ECU
Loading...
Searching...
No Matches
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
10void 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
17
18 m_valid = true;
19}
20
22 m_valid = false;
23}
24
26 if (!m_valid) {
27 return 0;
28 }
29
30 // Plus or minus any adjustment if this is an odd-fire engine
32
33 auto result = m_baseAngleOffset + adjustment;
34
35 assertAngleRange(result, "getAngleOffset", ObdCode::CUSTOM_ERR_CYL_ANGLE);
36
37 return result;
38}
39
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++) {
61 }
62}
EngineState engineState
Definition engine.h:344
OneCylinder cylinders[MAX_CYLINDER_COUNT]
Definition engine.h:291
angle_t engineCycle
angle_t getAngleOffset() const
uint8_t m_cylinderIndex
void updateCylinderNumber(uint8_t index, uint8_t cylinderNumber)
uint8_t m_cylinderNumber
angle_t m_baseAngleOffset
static EngineAccessor engine
Definition engine.h:413
static constexpr engine_configuration_s * engineConfiguration
size_t getCylinderNumberAtIndex(size_t cylinderIndex)
void updateCylinders(void)
@ OBD_PCM_Processor_Fault
@ CUSTOM_ERR_CYL_ANGLE