#pragma once
#include <wpi/SymbolExports.h>
#include "units/time.h"
namespace frc {
class WPILIB_DLLEXPORT EdgeCounterFilter {
public:
explicit EdgeCounterFilter(int requiredEdges, units::second_t windowTime);
bool Calculate(bool input);
constexpr void SetWindowTime(units::second_t windowTime) {
m_windowTime = windowTime;
}
constexpr units::second_t GetWindowTime() const { return m_windowTime; }
constexpr void SetRequiredEdges(int requiredEdges) {
m_requiredEdges = requiredEdges;
}
constexpr int GetRequiredEdges() const { return m_requiredEdges; }
private:
int m_requiredEdges;
units::second_t m_windowTime;
units::second_t m_firstEdgeTime;
int m_currentCount = 0;
bool m_lastInput = false;
void ResetTimer();
bool HasElapsed() const;
};
}