mirror of
https://github.com/meshtastic/firmware.git
synced 2025-07-31 02:45:41 +00:00
73 lines
2.0 KiB
C++
73 lines
2.0 KiB
C++
#include "BuzzerFeedbackThread.h"
|
|
#include "NodeDB.h"
|
|
#include "buzz.h"
|
|
#include "configuration.h"
|
|
|
|
BuzzerFeedbackThread *buzzerFeedbackThread;
|
|
|
|
BuzzerFeedbackThread::BuzzerFeedbackThread() : OSThread("BuzzerFeedback")
|
|
{
|
|
if (inputBroker)
|
|
inputObserver.observe(inputBroker);
|
|
}
|
|
|
|
int BuzzerFeedbackThread::handleInputEvent(const InputEvent *event)
|
|
{
|
|
// Only provide feedback if buzzer is enabled for notifications
|
|
if (config.device.buzzer_mode == meshtastic_Config_DeviceConfig_BuzzerMode_DISABLED ||
|
|
config.device.buzzer_mode == meshtastic_Config_DeviceConfig_BuzzerMode_NOTIFICATIONS_ONLY) {
|
|
return 0; // Let other handlers process the event
|
|
}
|
|
|
|
// Track last event time for potential future use
|
|
lastEventTime = millis();
|
|
needsUpdate = true;
|
|
|
|
// Handle different input events with appropriate buzzer feedback
|
|
switch (event->inputEvent) {
|
|
case INPUT_BROKER_USER_PRESS:
|
|
case INPUT_BROKER_ALT_PRESS:
|
|
case INPUT_BROKER_SELECT:
|
|
playBeep(); // Confirmation feedback
|
|
break;
|
|
|
|
case INPUT_BROKER_UP:
|
|
case INPUT_BROKER_DOWN:
|
|
case INPUT_BROKER_LEFT:
|
|
case INPUT_BROKER_RIGHT:
|
|
playChirp(); // Navigation feedback
|
|
break;
|
|
|
|
case INPUT_BROKER_CANCEL:
|
|
case INPUT_BROKER_BACK:
|
|
playBoop(); // Cancel/back feedback
|
|
break;
|
|
|
|
case INPUT_BROKER_SEND_PING:
|
|
playComboTune(); // Ping sent feedback
|
|
break;
|
|
|
|
default:
|
|
// For other events, check if it's a printable character
|
|
if (event->kbchar >= 32 && event->kbchar <= 126) {
|
|
// Typing feedback - very short boop
|
|
// Removing this for now, too chatty
|
|
// playChirp();
|
|
}
|
|
break;
|
|
}
|
|
|
|
return 0; // Allow other handlers to process the event
|
|
}
|
|
|
|
int32_t BuzzerFeedbackThread::runOnce()
|
|
{
|
|
// This thread is primarily event-driven, but we can use runOnce
|
|
// for any periodic tasks if needed in the future
|
|
|
|
needsUpdate = false;
|
|
|
|
// Run every 100ms when active, less frequently when idle
|
|
return needsUpdate ? 100 : 1000;
|
|
}
|