LCOV - code coverage report
Current view: top level - firmware/controllers/engine_cycle - fuel_schedule.h (source / functions) Hit Total Coverage
Test: coverage.info Lines: 3 3 100.0 %
Date: 2024-04-30 12:18:57 Functions: 1 1 100.0 %

          Line data    Source code
       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();
      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        4680 :         void setIndex(uint8_t index) {
      28        4680 :                 ownIndex = index;
      29        4680 :         }
      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(uintptr_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             :         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();

Generated by: LCOV version 1.14