File digital_control.h¶
File List > external-docs > libDaisy > src > hid > digital_control.h
Go to the documentation of this file
Source Code¶
#pragma once
#include "sys/system.h"
namespace daisy
{
struct DigitalControl
{
uint8_t state_;
bool flip_;
uint32_t rising_edge_time_;
DigitalControl() {}
inline void Init(bool flip)
{
flip_ = flip;
state_ = 0x00;
}
inline void Debounce(bool input)
{
uint8_t in_val;
if(flip_)
in_val = input ? 0 : 1;
else
in_val = input ? 1 : 0;
state_ = (state_ << 1) | in_val;
if(RisingEdge())
{
rising_edge_time_ = System::GetNow();
}
}
inline bool RisingEdge() const { return state_ == 0x7f; }
inline bool FallingEdge() const { return state_ == 0x80; }
inline bool Pressed() const { return state_ == 0xff; }
inline uint32_t TimeHeldMs() const
{
return Pressed() ? System::GetNow() - rising_edge_time_ : 0;
}
};
} // namespace daisy