F´ Flight Software - C/C++ Documentation devel
A framework for building embedded system applications to NASA flight quality standards.
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
RateLimiter.hpp
Go to the documentation of this file.
1// ======================================================================
2// \title RateLimiter.hpp
3// \author vwong
4// \brief hpp file for a rate limiter utility class
5//
6// \copyright
7// Copyright (C) 2009-2020 California Institute of Technology.
8//
9// ALL RIGHTS RESERVED. United States Government Sponsorship
10// acknowledged.
11// ======================================================================
12
13#ifndef RateLimiter_HPP
14#define RateLimiter_HPP
15
16#include <FpConfig.hpp>
17#include <Fw/Time/Time.hpp>
18
19namespace Utils {
20
22 {
23
24 public:
25
26 // Construct with defined cycles
27 RateLimiter(U32 counterCycle, U32 timeCycle);
28
29 // Construct with cycles set to 0
31
32 public:
33
34 // Adjust cycles at run-time
35 void setCounterCycle(U32 counterCycle);
36 void setTimeCycle(U32 timeCycle);
37
38 // Main point of entry
39 //
40 // It will only factor in counter or time, whichever one has a cycle defined
41 //
42 // If both are defined, then satisfying _either_ one will work
43 // e.g. I want to trigger only once every X times or once every Y
44 // seconds, whichever comes first
45 //
46 // The argument-less version is a shorthand for counter-only RateLimiters
47 // If a time cycle is defined but the argument-less version is called,
48 // RateLimiter assumes the client forgot to supply a time, and asserts
49 //
50 bool trigger(Fw::Time time);
51 bool trigger();
52
53 // Manual state adjustments, if necessary
54 void reset();
55 void resetCounter();
56 void resetTime();
57 void setCounter(U32);
58 void setTime(Fw::Time time);
59
60 private:
61
62 // Helper functions to update each independently
63 bool shouldCounterTrigger();
64 bool shouldTimeTrigger(Fw::Time time);
65 void updateCounter(bool triggered);
66 void updateTime(bool triggered, Fw::Time time);
67
68 private:
69
70 // parameters
71 U32 m_counterCycle;
72 U32 m_timeCycle;
73
74 // state
75 U32 m_counter;
76 Fw::Time m_time;
77 bool m_timeAtNegativeInfinity;
78 };
79
80} // end namespace Utils
81
82#endif
C++-compatible configuration header for fprime configuration.
void setTime(Fw::Time time)
void setTimeCycle(U32 timeCycle)
void setCounterCycle(U32 counterCycle)