rusEFI
The most advanced open source ECU
Loading...
Searching...
No Matches
Public Member Functions | Private Member Functions | Private Attributes
MainLoop Class Reference

#include <main_loop_controller.h>

Inheritance diagram for MainLoop:
Inheritance graph
[legend]
Collaboration diagram for MainLoop:
Collaboration graph
[legend]

Public Member Functions

 MainLoop ()
 
void PeriodicTask (efitick_t nowNt) override
 Called periodically. Override this method to do work for your controller.
 
- Public Member Functions inherited from PeriodicController< 1024 >
 PeriodicController (const char *name, tprio_t priority, float frequencyHz)
 
 PeriodicController (const char *name)
 
void setPeriod (int periodMs)
 
- Public Member Functions inherited from ThreadController< TStackSize >
 ThreadController (const char *name, tprio_t priority)
 
void start ()
 Start the thread.
 
void stop ()
 Request thread termination and waits for termination.
 

Private Member Functions

template<LoopPeriod TFlag>
LoopPeriod makePeriodFlag () const
 
LoopPeriod makePeriodFlags ()
 

Private Attributes

int m_cycleCounter = 0
 

Additional Inherited Members

- Protected Member Functions inherited from PeriodicController< 1024 >
virtual void OnStarted ()
 Called before running the periodic task. Optionally override this method to set up.
 
- Protected Member Functions inherited from ThreadController< TStackSize >
void main () override
 
- Protected Attributes inherited from ThreadController< TStackSize >
const char *const m_name
 

Detailed Description

Definition at line 21 of file main_loop_controller.h.

Constructor & Destructor Documentation

◆ MainLoop()

MainLoop::MainLoop ( )

Definition at line 10 of file main_loop.cpp.

11 : PeriodicController("MainLoop", PRIO_MAIN_LOOP, MAIN_LOOP_RATE)
12{
13}
Base class for a controller that needs to run periodically to perform work.

Member Function Documentation

◆ makePeriodFlag()

template<LoopPeriod TFlag>
LoopPeriod MainLoop::makePeriodFlag ( ) const
private

Definition at line 16 of file main_loop.cpp.

16 {
17 if (m_cycleCounter % loopCounts<TFlag>() == 0) {
18 return TFlag;
19 } else {
20 return LoopPeriod::None;
21 }
22}

◆ makePeriodFlags()

LoopPeriod MainLoop::makePeriodFlags ( )
private

Definition at line 24 of file main_loop.cpp.

24 {
25 if (m_cycleCounter >= MAIN_LOOP_RATE) {
27 }
28
30 lp |= makePeriodFlag<LoopPeriod::Period1000hz>();
31 lp |= makePeriodFlag<LoopPeriod::Period500hz>();
32 lp |= makePeriodFlag<LoopPeriod::Period250hz>();
33 lp |= makePeriodFlag<LoopPeriod::Period200hz>();
34 lp |= makePeriodFlag<LoopPeriod::Period20hz>();
35
37
38 return lp;
39}
LoopPeriod
Definition main_loop.h:7

Referenced by PeriodicTask().

Here is the caller graph for this function:

◆ PeriodicTask()

void MainLoop::PeriodicTask ( efitick_t  nowNt)
overridevirtual

Called periodically. Override this method to do work for your controller.

Implements PeriodicController< 1024 >.

Definition at line 41 of file main_loop.cpp.

41 {
43
44 LoopPeriod currentLoopPeriod = makePeriodFlags();
45
46#if HAL_USE_ADC
47 if (currentLoopPeriod & ADC_UPDATE_RATE) {
49 }
50#endif // HAL_USE_ADC
51
52#if EFI_ELECTRONIC_THROTTLE_BODY
53 if (currentLoopPeriod & ETB_UPDATE_RATE) {
54 // TODO: main_loop etb callback
55 }
56#endif // EFI_ELECTRONIC_THROTTLE_BODY
57
58 if (currentLoopPeriod & SLOW_CALLBACK_RATE) {
59 //TODO: main_loop slow callback
60 }
61
62 if (currentLoopPeriod & FAST_CALLBACK_RATE) {
63 //TODO: main_loop fast callback
64 }
65}
void adcInputsUpdateSubscribers(efitick_t nowNt)
LoopPeriod makePeriodFlags()
Definition main_loop.cpp:24
@ MainLoop
Here is the call graph for this function:

Field Documentation

◆ m_cycleCounter

int MainLoop::m_cycleCounter = 0
private

Definition at line 35 of file main_loop_controller.h.

Referenced by makePeriodFlag(), and makePeriodFlags().


The documentation for this class was generated from the following files: