diff --git a/.github/workflows/first_time_contributor.yml b/.github/workflows/first_time_contributor.yml index 272ce4d10..1ebc9a602 100644 --- a/.github/workflows/first_time_contributor.yml +++ b/.github/workflows/first_time_contributor.yml @@ -22,7 +22,7 @@ jobs: ### @{fc-author}, Welcome to Meshtastic! :wave: Thanks for opening your first issue. If it's helpful, an easy way - to get logs is the "Open Serial Monitor" button on the (Web Flasher](https://flasher.meshtastic.org). + to get logs is the "Open Serial Monitor" button on the [Web Flasher](https://flasher.meshtastic.org). If you have ideas for features, note that we often debate big ideas in the [discussions tab](https://github.com/meshtastic/firmware/discussions/categories/ideas) diff --git a/src/buzz/BuzzerFeedbackThread.cpp b/src/buzz/BuzzerFeedbackThread.cpp index 7de6c0740..0716dedd0 100644 --- a/src/buzz/BuzzerFeedbackThread.cpp +++ b/src/buzz/BuzzerFeedbackThread.cpp @@ -24,6 +24,9 @@ int BuzzerFeedbackThread::handleInputEvent(const InputEvent *event) switch (event->inputEvent) { case INPUT_BROKER_USER_PRESS: case INPUT_BROKER_ALT_PRESS: + playClick(); // Low delay feedback + break; + case INPUT_BROKER_SELECT: case INPUT_BROKER_SELECT_LONG: playBeep(); // Confirmation feedback @@ -58,4 +61,4 @@ int BuzzerFeedbackThread::handleInputEvent(const InputEvent *event) } return 0; // Allow other handlers to process the event -} \ No newline at end of file +} diff --git a/src/buzz/buzz.cpp b/src/buzz/buzz.cpp index aa8346585..00ad71031 100644 --- a/src/buzz/buzz.cpp +++ b/src/buzz/buzz.cpp @@ -113,7 +113,14 @@ void playShutdownMelody() void playChirp() { // A short, friendly "chirp" sound for key presses - ToneDuration melody[] = {{NOTE_AS3, 20}}; // Very short AS3 note + ToneDuration melody[] = {{NOTE_AS3, 20}}; // Short AS3 note + playTones(melody, sizeof(melody) / sizeof(ToneDuration)); +} + +void playClick() +{ + // A very short "click" sound with minimum delay; ideal for rotary encoder events + ToneDuration melody[] = {{NOTE_AS3, 1}}; // Very Short AS3 playTones(melody, sizeof(melody) / sizeof(ToneDuration)); } diff --git a/src/buzz/buzz.h b/src/buzz/buzz.h index c25a54a5b..fa0c8c496 100644 --- a/src/buzz/buzz.h +++ b/src/buzz/buzz.h @@ -9,6 +9,7 @@ void playGPSDisableBeep(); void playComboTune(); void playBoop(); void playChirp(); +void playClick(); void playLongPressLeadUp(); bool playNextLeadUpNote(); // Play the next note in the lead-up sequence void resetLeadUpSequence(); // Reset the lead-up sequence to start from beginning \ No newline at end of file diff --git a/src/mesh/RadioInterface.cpp b/src/mesh/RadioInterface.cpp index f82a21fe9..a74b33abf 100644 --- a/src/mesh/RadioInterface.cpp +++ b/src/mesh/RadioInterface.cpp @@ -520,6 +520,10 @@ void RadioInterface::applyModemConfig() sf = 12; break; } + if (loraConfig.coding_rate >= 5 && loraConfig.coding_rate <= 8 && loraConfig.coding_rate != cr) { + cr = loraConfig.coding_rate; + LOG_INFO("Using custom Coding Rate %u", cr); + } } else { sf = loraConfig.spread_factor; cr = loraConfig.coding_rate;