mirror of
https://github.com/meshtastic/firmware.git
synced 2025-07-31 02:45:41 +00:00
When outputting RTTTL ringtones, you can still hear a periodic buzzing sound. This problem is fixed in this commit.
This commit is contained in:
parent
fdd60b93b3
commit
34f0ea2644
@ -126,9 +126,11 @@ int32_t ExternalNotificationModule::runOnce()
|
|||||||
millis()) {
|
millis()) {
|
||||||
setExternalState(1, !getExternal(1));
|
setExternalState(1, !getExternal(1));
|
||||||
}
|
}
|
||||||
if (externalTurnedOn[2] + (moduleConfig.external_notification.output_ms ? moduleConfig.external_notification.output_ms
|
// Only toggle buzzer output if not using PWM mode (to avoid conflict with RTTTL)
|
||||||
|
if (!moduleConfig.external_notification.use_pwm &&
|
||||||
|
externalTurnedOn[2] + (moduleConfig.external_notification.output_ms ? moduleConfig.external_notification.output_ms
|
||||||
: EXT_NOTIFICATION_MODULE_OUTPUT_MS) <
|
: EXT_NOTIFICATION_MODULE_OUTPUT_MS) <
|
||||||
millis()) {
|
millis()) {
|
||||||
LOG_DEBUG("EXTERNAL 2 %d compared to %d", externalTurnedOn[2] + moduleConfig.external_notification.output_ms,
|
LOG_DEBUG("EXTERNAL 2 %d compared to %d", externalTurnedOn[2] + moduleConfig.external_notification.output_ms,
|
||||||
millis());
|
millis());
|
||||||
setExternalState(2, !getExternal(2));
|
setExternalState(2, !getExternal(2));
|
||||||
@ -247,7 +249,8 @@ void ExternalNotificationModule::setExternalState(uint8_t index, bool on)
|
|||||||
digitalWrite(moduleConfig.external_notification.output_vibra, on);
|
digitalWrite(moduleConfig.external_notification.output_vibra, on);
|
||||||
break;
|
break;
|
||||||
case 2:
|
case 2:
|
||||||
if (moduleConfig.external_notification.output_buzzer)
|
// Only control buzzer pin digitally if not using PWM mode
|
||||||
|
if (moduleConfig.external_notification.output_buzzer && !moduleConfig.external_notification.use_pwm)
|
||||||
digitalWrite(moduleConfig.external_notification.output_buzzer, on);
|
digitalWrite(moduleConfig.external_notification.output_buzzer, on);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
@ -320,6 +323,11 @@ void ExternalNotificationModule::stopNow()
|
|||||||
#endif
|
#endif
|
||||||
nagCycleCutoff = 1; // small value
|
nagCycleCutoff = 1; // small value
|
||||||
isNagging = false;
|
isNagging = false;
|
||||||
|
// Turn off all outputs
|
||||||
|
for (int i = 0; i < 3; i++) {
|
||||||
|
setExternalState(i, false);
|
||||||
|
externalTurnedOn[i] = 0;
|
||||||
|
}
|
||||||
setIntervalFromNow(0);
|
setIntervalFromNow(0);
|
||||||
#ifdef T_WATCH_S3
|
#ifdef T_WATCH_S3
|
||||||
drv.stop();
|
drv.stop();
|
||||||
@ -478,14 +486,17 @@ ProcessMessage ExternalNotificationModule::handleReceived(const meshtastic_MeshP
|
|||||||
if (containsBell) {
|
if (containsBell) {
|
||||||
LOG_INFO("externalNotificationModule - Notification Bell (Buzzer)");
|
LOG_INFO("externalNotificationModule - Notification Bell (Buzzer)");
|
||||||
isNagging = true;
|
isNagging = true;
|
||||||
if (!moduleConfig.external_notification.use_pwm) {
|
if (!moduleConfig.external_notification.use_pwm && !moduleConfig.external_notification.use_i2s_as_buzzer) {
|
||||||
setExternalState(2, true);
|
setExternalState(2, true);
|
||||||
} else {
|
} else {
|
||||||
#ifdef HAS_I2S
|
#ifdef HAS_I2S
|
||||||
audioThread->beginRttl(rtttlConfig.ringtone, strlen_P(rtttlConfig.ringtone));
|
if (moduleConfig.external_notification.use_i2s_as_buzzer) {
|
||||||
#else
|
audioThread->beginRttl(rtttlConfig.ringtone, strlen_P(rtttlConfig.ringtone));
|
||||||
rtttl::begin(config.device.buzzer_gpio, rtttlConfig.ringtone);
|
} else
|
||||||
#endif
|
#endif
|
||||||
|
if (moduleConfig.external_notification.use_pwm) {
|
||||||
|
rtttl::begin(config.device.buzzer_gpio, rtttlConfig.ringtone);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
if (moduleConfig.external_notification.nag_timeout) {
|
if (moduleConfig.external_notification.nag_timeout) {
|
||||||
nagCycleCutoff = millis() + moduleConfig.external_notification.nag_timeout * 1000;
|
nagCycleCutoff = millis() + moduleConfig.external_notification.nag_timeout * 1000;
|
||||||
@ -526,10 +537,11 @@ ProcessMessage ExternalNotificationModule::handleReceived(const meshtastic_MeshP
|
|||||||
#ifdef HAS_I2S
|
#ifdef HAS_I2S
|
||||||
if (moduleConfig.external_notification.use_i2s_as_buzzer) {
|
if (moduleConfig.external_notification.use_i2s_as_buzzer) {
|
||||||
audioThread->beginRttl(rtttlConfig.ringtone, strlen_P(rtttlConfig.ringtone));
|
audioThread->beginRttl(rtttlConfig.ringtone, strlen_P(rtttlConfig.ringtone));
|
||||||
}
|
} else
|
||||||
#else
|
|
||||||
rtttl::begin(config.device.buzzer_gpio, rtttlConfig.ringtone);
|
|
||||||
#endif
|
#endif
|
||||||
|
if (moduleConfig.external_notification.use_pwm) {
|
||||||
|
rtttl::begin(config.device.buzzer_gpio, rtttlConfig.ringtone);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
if (moduleConfig.external_notification.nag_timeout) {
|
if (moduleConfig.external_notification.nag_timeout) {
|
||||||
nagCycleCutoff = millis() + moduleConfig.external_notification.nag_timeout * 1000;
|
nagCycleCutoff = millis() + moduleConfig.external_notification.nag_timeout * 1000;
|
||||||
|
Loading…
Reference in New Issue
Block a user