* GenericVibration: code style refactor

This commit is contained in:
Scott Powell 2025-09-18 13:19:54 +10:00
parent b3e9fd76ce
commit 384b02bec4
5 changed files with 73 additions and 79 deletions

View file

@ -12,7 +12,7 @@
#include <helpers/ui/buzzer.h>
#endif
#ifdef PIN_VIBRATION
#include <helpers/ui/vibration.h>
#include <helpers/ui/GenericVibration.h>
#endif
#include "../AbstractUITask.h"
@ -25,7 +25,7 @@ class UITask : public AbstractUITask {
genericBuzzer buzzer;
#endif
#ifdef PIN_VIBRATION
genericVibration vibration;
GenericVibration vibration;
#endif
unsigned long _next_refresh, _auto_off;
NodePrefs* _node_prefs;

View file

@ -0,0 +1,38 @@
#ifdef PIN_VIBRATION
#include "GenericVibration.h"
void GenericVibration::begin() {
pinMode(PIN_VIBRATION, OUTPUT);
digitalWrite(PIN_VIBRATION, LOW);
duration = 0;
}
void GenericVibration::trigger() {
duration = millis();
digitalWrite(PIN_VIBRATION, HIGH);
}
void GenericVibration::loop() {
if (isVibrating()) {
if ((millis() / 1000) % 2 == 0) {
digitalWrite(PIN_VIBRATION, LOW);
} else {
digitalWrite(PIN_VIBRATION, HIGH);
}
if (millis() - duration > VIBRATION_TIMEOUT) {
stop();
}
}
}
bool GenericVibration::isVibrating() {
return duration > 0;
}
void GenericVibration::stop() {
duration = 0;
digitalWrite(PIN_VIBRATION, LOW);
}
#endif // ifdef PIN_VIBRATION

View file

@ -0,0 +1,33 @@
#pragma once
#ifdef PIN_VIBRATION
#include <Arduino.h>
/*
* Vibration motor control class
*
* Provides vibration feedback for events like new messages and new contacts
* Features:
* - 1-second vibration pulse
* - 5-second nag timeout (cooldown between vibrations)
* - Non-blocking operation
*/
#ifndef VIBRATION_TIMEOUT
#define VIBRATION_TIMEOUT 5000 // 5 seconds default
#endif
class GenericVibration {
public:
void begin(); // set up vibration pin
void trigger(); // trigger vibration if cooldown has passed
void loop(); // non-blocking timer handling
bool isVibrating(); // returns true if currently vibrating
void stop(); // stop vibration immediately
private:
unsigned long duration;
};
#endif // ifdef PIN_VIBRATION

View file

@ -1,43 +0,0 @@
#ifdef PIN_VIBRATION
#include "vibration.h"
void genericVibration::begin()
{
pinMode(PIN_VIBRATION, OUTPUT);
digitalWrite(PIN_VIBRATION, LOW);
duration = 0;
}
void genericVibration::trigger()
{
duration = millis();
digitalWrite(PIN_VIBRATION, HIGH);
}
void genericVibration::loop()
{
if (isVibrating()) {
if ((millis() / 1000) % 2 == 0) {
digitalWrite(PIN_VIBRATION, LOW);
} else {
digitalWrite(PIN_VIBRATION, HIGH);
}
if (millis() - duration > VIBRATION_TIMEOUT) {
stop();
}
}
}
bool genericVibration::isVibrating()
{
return duration > 0;
}
void genericVibration::stop()
{
duration = 0;
digitalWrite(PIN_VIBRATION, LOW);
}
#endif // ifdef PIN_VIBRATION

View file

@ -1,34 +0,0 @@
#pragma once
#ifdef PIN_VIBRATION
#include <Arduino.h>
/*
* Vibration motor control class
*
* Provides vibration feedback for events like new messages and new contacts
* Features:
* - 1-second vibration pulse
* - 5-second nag timeout (cooldown between vibrations)
* - Non-blocking operation
*/
#ifndef VIBRATION_TIMEOUT
#define VIBRATION_TIMEOUT 5000 // 5 seconds default
#endif
class genericVibration
{
public:
void begin(); // set up vibration pin
void trigger(); // trigger vibration if cooldown has passed
void loop(); // non-blocking timer handling
bool isVibrating(); // returns true if currently vibrating
void stop(); // stop vibration immediately
private:
unsigned long duration;
};
#endif // ifdef PIN_VIBRATION