GCC Code Coverage Report


Directory: ./
File: firmware/controllers/engine_cycle/fuel_schedule.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: -% 0 0 0
Decisions: -% 0 - 0

Line Branch Decision Exec Source
1 /**
2 * @file fuel_schedule.h
3 */
4
5 #pragma once
6
7 #include "global.h"
8 #include "efi_gpio.h"
9 #include "scheduler.h"
10 #include "fl_stack.h"
11 #include "trigger_structure.h"
12 #include "wall_fuel.h"
13
14 #define MAX_WIRES_COUNT 2
15
16 class InjectionEvent {
17 public:
18 InjectionEvent() = default;
19
20 bool update();
21
22 // Call this every decoded trigger tooth. It will schedule any relevant events for this injector.
23 void onTriggerTooth(efitick_t nowNt, float currentPhase, float nextPhase);
24
25 WallFuel& getWallFuel();
26
27 8124 void setIndex(uint8_t index) {
28 8124 ownIndex = index;
29 8124 }
30
31 private:
32 // Update the injection start angle
33 bool updateInjectionAngle();
34
35 // Compute the injection start angle, compensating for injection duration and injection phase settings.
36 expected<float> computeInjectionAngle() const;
37
38 /**
39 * This is a performance optimization for IM_SIMULTANEOUS fuel strategy.
40 * It's more efficient to handle all injectors together if that's the case
41 */
42 bool isSimultaneous = false;
43 uint8_t ownIndex = 0;
44 uint8_t cylinderNumber = 0;
45
46 WallFuel wallFuel{};
47
48 public:
49 // TODO: this should be private
50 InjectorOutputPin *outputs[MAX_WIRES_COUNT]{};
51 InjectorOutputPin *outputsStage2[MAX_WIRES_COUNT]{};
52 float injectionStartAngle = 0;
53 };
54
55 void turnInjectionPinHigh(scheduler_arg_t arg);
56
57
58 /**
59 * This class knows about when to inject fuel
60 */
61 class FuelSchedule {
62 public:
63 FuelSchedule();
64
65 // Call this function if something happens that requires a rebuild, like a change to the trigger pattern
66 void invalidate();
67
68 // Call this every trigger tooth. It will schedule all required injector events.
69 void onTriggerTooth(efitick_t nowNt, float currentPhase, float nextPhase);
70
71 /**
72 * this method schedules all fuel events for an engine cycle
73 * Calculate injector opening angle, pins, and mode for all injectors
74 */
75 void addFuelEvents();
76
77 static void resetOverlapping();
78
79 /**
80 * injection events, per cylinder
81 */
82 InjectionEvent elements[MAX_CYLINDER_COUNT];
83 bool isReady = false;
84 };
85
86 FuelSchedule * getFuelSchedule();
87