Browse Source

✨ STARTUP_TUNE configuration

Scott Lahteine 1 year ago
parent
commit
42c62ff84e
4 changed files with 26 additions and 3 deletions
  1. 12 0
      Marlin/Configuration.h
  2. 3 2
      Marlin/src/MarlinCore.cpp
  3. 10 0
      Marlin/src/inc/SanityCheck.h
  4. 1 1
      buildroot/tests/NUCLEO_F767ZI

+ 12 - 0
Marlin/Configuration.h

@@ -2681,6 +2681,18 @@
 //#define LCD_FEEDBACK_FREQUENCY_DURATION_MS 2
 //#define LCD_FEEDBACK_FREQUENCY_HZ 5000
 
+//
+// Tone queue size, used to keep beeps from blocking execution.
+// Default is 4, or override here. Costs 4 bytes of SRAM per entry.
+//
+//#define TONE_QUEUE_LENGTH 4
+
+//
+// A sequence of tones to play at startup, in pairs of tone (Hz), duration (ms).
+// Silence in-between tones.
+//
+//#define STARTUP_TUNE { 698, 300, 0, 50, 523, 50, 0, 25, 494, 50, 0, 25, 523, 100, 0, 50, 554, 300, 0, 100, 523, 300 }
+
 //=============================================================================
 //======================== LCD / Controller Selection =========================
 //========================   (Character-based LCDs)   =========================

+ 3 - 2
Marlin/src/MarlinCore.cpp

@@ -1660,9 +1660,10 @@ void setup() {
 
   marlin_state = MF_RUNNING;
 
-  #if ENABLED(SPEAKER) && defined(STARTUP_TUNE)
+  #ifdef STARTUP_TUNE
+    // Play a short startup tune before continuing.
     constexpr uint16_t tune[] = STARTUP_TUNE;
-    for (uint8_t i = 0; i < COUNT(tune); i += 2) BUZZ(tune[i + 1], tune[i]);
+    for (uint8_t i = 0; i < COUNT(tune) - 1; i += 2) BUZZ(tune[i + 1], tune[i]);
   #endif
 
   SETUP_LOG("setup() completed.");

+ 10 - 0
Marlin/src/inc/SanityCheck.h

@@ -3324,6 +3324,16 @@ static_assert(X_MAX_LENGTH >= X_BED_SIZE, "Movement bounds (X_MIN_POS, X_MAX_POS
   #endif
 #endif
 
+// Startup Tune requirements
+#ifdef STARTUP_TUNE
+  #if EITHER(ANYCUBIC_LCD_CHIRON, ANYCUBIC_LCD_VYPER)
+    #error "STARTUP_TUNE should be disabled with ANYCUBIC_LCD_CHIRON or ANYCUBIC_LCD_VYPER."
+  #elif !(BOTH(HAS_BEEPER, SPEAKER) || USE_MARLINUI_BUZZER)
+    #error "STARTUP_TUNE requires a BEEPER_PIN with SPEAKER or USE_MARLINUI_BUZZER."
+    #undef STARTUP_TUNE
+  #endif
+#endif
+
 /**
  * Display Sleep is not supported by these common displays
  */

+ 1 - 1
buildroot/tests/NUCLEO_F767ZI

@@ -11,7 +11,7 @@ set -e
 #
 restore_configs
 opt_set MOTHERBOARD BOARD_NUCLEO_F767ZI SERIAL_PORT -1 X_DRIVER_TYPE TMC2209 Y_DRIVER_TYPE TMC2208
-opt_enable BLTOUCH Z_SAFE_HOMING SPEAKER SOFTWARE_DRIVER_ENABLE
+opt_enable BLTOUCH Z_SAFE_HOMING REPRAP_DISCOUNT_FULL_GRAPHIC_SMART_CONTROLLER SPEAKER STARTUP_TUNE SOFTWARE_DRIVER_ENABLE
 exec_test $1 $2 "Mixed timer usage" "$3"
 
 # clean up