Browse Source

Makes buzzer melody buffer static

Ensures the RTTTL player has a persistent buffer for melody data. The player stores a pointer to the melody, which requires the buffer to outlive the function call. A static buffer guarantees this, preventing issues from accessing deallocated memory. This is safe as concurrent playback is not supported.
pull/2665/head
Mark Jocas 2 months ago
parent
commit
913ed609a3
No known key found for this signature in database GPG Key ID: F75EF1C43FC564B4
  1. 6
      src/helpers/ui/buzzer.cpp

6
src/helpers/ui/buzzer.cpp

@ -49,8 +49,10 @@ void genericBuzzer::playToggle(int count, bool enabled) {
const int max_notes = (int)(sizeof(notes) / sizeof(notes[0]));
if (count < 1) count = 1;
if (count > max_notes) count = max_notes;
char melody[64];
// d=8 (eighths) at b=180 -> ~166 ms per note, audible on small piezos.
// NonBlockingRtttl stores only a pointer to the melody, so the backing
// buffer must outlive the call. A static buffer is fine here because the
// library can't play two melodies at once anyway.
static char melody[64];
int n = snprintf(melody, sizeof(melody), "Tg:d=8,o=6,b=180:");
for (int i = 0; i < count && n < (int)sizeof(melody); i++) {
int idx = enabled ? i : (count - 1 - i);

Loading…
Cancel
Save