66 lines
1.6 KiB
C++
66 lines
1.6 KiB
C++
#ifndef FSFW_GLOBALFUNCTIONS_PERIODICOPERATIONDIVIDER_H_
|
|
#define FSFW_GLOBALFUNCTIONS_PERIODICOPERATIONDIVIDER_H_
|
|
|
|
#include <cstdint>
|
|
|
|
/**
|
|
* @brief Lightweight helper class to facilitate periodic operation with
|
|
* decreased frequencies.
|
|
* @details
|
|
* This class is useful to perform operations which have to be performed
|
|
* with a reduced frequency, like debugging printouts in high periodic tasks
|
|
* or low priority operations.
|
|
*/
|
|
class PeriodicOperationDivider {
|
|
public:
|
|
/**
|
|
* Initialize with the desired divider and specify whether the internal
|
|
* counter will be reset automatically.
|
|
* @param divider
|
|
* @param resetAutomatically
|
|
*/
|
|
PeriodicOperationDivider(uint32_t divider, bool resetAutomatically = true);
|
|
|
|
|
|
/**
|
|
* Check whether operation is necessary.
|
|
* If an operation is necessary and the class has been
|
|
* configured to be reset automatically, the counter will be reset.
|
|
*
|
|
* @return
|
|
* -@c true if the counter is larger or equal to the divider
|
|
* -@c false otherwise
|
|
*/
|
|
bool checkAndIncrement();
|
|
|
|
/**
|
|
* Checks whether an operation is necessary.
|
|
* This function will not increment the counter!
|
|
* @return
|
|
* -@c true if the counter is larger or equal to the divider
|
|
* -@c false otherwise
|
|
*/
|
|
bool check();
|
|
|
|
/**
|
|
* Can be used to reset the counter to 0 manually.
|
|
*/
|
|
void resetCounter();
|
|
uint32_t getCounter() const;
|
|
|
|
/**
|
|
* Can be used to set a new divider value.
|
|
* @param newDivider
|
|
*/
|
|
void setDivider(uint32_t newDivider);
|
|
uint32_t getDivider() const;
|
|
private:
|
|
bool resetAutomatically = true;
|
|
uint32_t counter = 0;
|
|
uint32_t divider = 0;
|
|
};
|
|
|
|
|
|
|
|
#endif /* FSFW_GLOBALFUNCTIONS_PERIODICOPERATIONDIVIDER_H_ */
|