Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
16 changes: 15 additions & 1 deletion src/Button2.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -140,6 +140,16 @@ void Button2::setLongClickHandler(CallbackFunction f) {

void Button2::setLongClickDetectedRetriggerable(bool retriggerable) {
longclick_retriggerable = retriggerable;
has_longclick_retrigger_ms = false;

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Hi, i like your idea, not sure if the "has_longclick_retrigger_ms" is really needed you could just check if "longclick_retrigger_ms" has a value.

longclick_retrigger_ms = 0;
}

/////////////////////////////////////////////////////////////////

void Button2::setLongClickDetectedRetriggerable(bool retriggerable, unsigned int retrigger_ms) {
longclick_retriggerable = retriggerable;
has_longclick_retrigger_ms = true;
longclick_retrigger_ms = retrigger_ms;
}

/////////////////////////////////////////////////////////////////
Expand Down Expand Up @@ -398,7 +408,11 @@ void Button2::_checkForLongClick(long now) {
if (longclick_reported) return;

// has the longclick_ms period has been exceeded?
if (now - down_ms < (longclick_time_ms * (longclick_counter + 1))) return;
unsigned int threshold_ms =
has_longclick_retrigger_ms
? longclick_time_ms + longclick_retrigger_ms * longclick_counter
: (longclick_time_ms * (longclick_counter + 1));
if (now - down_ms < threshold_ms) return;
// report multiple?

if (!longclick_retriggerable) {
Expand Down
3 changes: 3 additions & 0 deletions src/Button2.h
Original file line number Diff line number Diff line change
Expand Up @@ -61,12 +61,14 @@ class Button2 {
unsigned long down_ms;

bool longclick_retriggerable;
bool has_longclick_retrigger_ms = false;
uint16_t longclick_counter = 0;
bool longclick_detected = false;
bool longclick_reported = false;

unsigned int debounce_time_ms = BTN_DEBOUNCE_MS;
unsigned int longclick_time_ms = BTN_LONGCLICK_MS;
unsigned int longclick_retrigger_ms = 0;
unsigned int doubleclick_time_ms = BTN_DOUBLECLICK_MS;

unsigned int down_time_ms = 0;
Expand Down Expand Up @@ -135,6 +137,7 @@ class Button2 {
void setLongClickDetectedHandler(CallbackFunction f);

void setLongClickDetectedRetriggerable(bool retriggerable);
void setLongClickDetectedRetriggerable(bool retriggerable, unsigned int retrigger_ms);

unsigned int wasPressedFor() const;
bool isPressed() const;
Expand Down