]> git.donarmstrong.com Git - qmk_firmware.git/commitdiff
Fix up the ARM audio support (#2136)
authorskullydazed <skullydazed@users.noreply.github.com>
Sun, 14 Jan 2018 04:38:25 +0000 (20:38 -0800)
committerJack Humbert <jack.humb@gmail.com>
Sun, 14 Jan 2018 04:38:25 +0000 (23:38 -0500)
* Get audio working on clueboard/60

* add keys for music mode

* Change doubles to floats

* add keys for all the songs

* revert to the default startup sound

* Remove music mode until we can figure out why it crashes

common_features.mk
keyboards/clueboard/60/keymaps/default/keymap.c
keyboards/clueboard/60/led.c
keyboards/clueboard/60/matrix.c
keyboards/clueboard/60/rules.mk
quantum/audio/audio_arm.c
quantum/audio/musical_notes.h
quantum/audio/song_list.h

index 319834b5e524d328e5fe7db0e573ea9340990be5..a67cf230f39a8f2fb7ede1b67d8fbc1ef7f035c0 100644 (file)
@@ -34,7 +34,11 @@ ifeq ($(strip $(AUDIO_ENABLE)), yes)
     OPT_DEFS += -DAUDIO_ENABLE
     MUSIC_ENABLE := 1
     SRC += $(QUANTUM_DIR)/process_keycode/process_audio.c
-    SRC += $(QUANTUM_DIR)/audio/audio.c
+    ifeq ($(PLATFORM),AVR)
+        SRC += $(QUANTUM_DIR)/audio/audio.c
+    else
+        SRC += $(QUANTUM_DIR)/audio/audio_arm.c
+    endif
     SRC += $(QUANTUM_DIR)/audio/voices.c
     SRC += $(QUANTUM_DIR)/audio/luts.c
 endif
index 1b0c7126409782a459095e64ecdcc25d7f02cc16..8397c4bbfb1aadebca2eaea21af2bad492716e8a 100644 (file)
@@ -3,11 +3,35 @@
 #define _______ KC_TRNS
 
 enum keyboard_layers {
-  _BL,
-  _FL,
-  _CL
+    _BL,
+    _FL,
+    _CL
 };
 
+enum custom_keycodes {
+    S_BSKTC = SAFE_RANGE,
+    S_ODEJY,
+    S_RCKBY,
+    S_DOEDR,
+    S_SCALE,
+    S_ONEUP,
+    S_COIN,
+    S_SONIC,
+    S_ZELDA
+};
+
+#ifdef AUDIO_ENABLE
+  float song_basketcase[][2] = SONG(BASKET_CASE);
+  float song_ode_to_joy[][2]  = SONG(ODE_TO_JOY);
+  float song_rock_a_bye_baby[][2]  = SONG(ROCK_A_BYE_BABY);
+  float song_doe_a_deer[][2]  = SONG(DOE_A_DEER);
+  float song_scale[][2]  = SONG(MUSIC_SCALE_SOUND);
+  float song_coin[][2]  = SONG(COIN_SOUND);
+  float song_one_up[][2]  = SONG(ONE_UP_SOUND);
+  float song_sonic_ring[][2]  = SONG(SONIC_RING);
+  float song_zelda_puzzle[][2]  = SONG(ZELDA_PUZZLE);
+#endif
+
 const uint16_t keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
     /* Layer 0: Default Layer
      * ,-----------------------------------------------------------.
@@ -33,11 +57,71 @@ const uint16_t keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
       _______,   _______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,     \
       _______,     _______,MO(_CL),_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,  _______, \
       _______,  _______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,  _______,   _______, \
-      _______,  _______,  _______,                        _______,                     _______,  _______,  MO(_FL),   _______),
+      _______,_______,_______,                        _______,                     _______,  _______,  MO(_FL),   _______),
     [_CL] = KEYMAP(
-      BL_STEP,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,\
+      BL_STEP,S_BSKTC,S_ODEJY,S_RCKBY,S_DOEDR,S_SCALE,S_ONEUP,S_COIN, S_SONIC,S_ZELDA,_______,_______,_______,_______,_______,\
       _______,   _______,_______,_______,RESET,  _______,_______,_______,_______,_______,_______,_______,_______,_______,     \
       _______,     _______,MO(_CL),_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,  _______, \
       _______,  _______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,     _______, \
       _______,  _______,  _______,                        _______,                     _______,  _______,  MO(_FL),   _______)
 };
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+    switch (keycode) {
+        case S_BSKTC:
+            if (record->event.pressed) {
+                stop_all_notes();
+                PLAY_SONG(song_basketcase);
+            }
+            return false;
+        case S_ODEJY:
+            if (record->event.pressed) {
+                stop_all_notes();
+                PLAY_SONG(song_ode_to_joy);
+            }
+            return false;
+        case S_RCKBY:
+            if (record->event.pressed) {
+                stop_all_notes();
+                PLAY_SONG(song_rock_a_bye_baby);
+            }
+            return false;
+        case S_DOEDR:
+            if (record->event.pressed) {
+                stop_all_notes();
+                PLAY_SONG(song_doe_a_deer);
+            }
+            return false;
+        case S_SCALE:
+            if (record->event.pressed) {
+                stop_all_notes();
+                PLAY_SONG(song_scale);
+            }
+            return false;
+        case S_ONEUP:
+            if (record->event.pressed) {
+                stop_all_notes();
+                PLAY_SONG(song_one_up);
+            }
+            return false;
+        case S_COIN:
+            if (record->event.pressed) {
+                stop_all_notes();
+                PLAY_SONG(song_coin);
+            }
+            return false;
+        case S_SONIC:
+            if (record->event.pressed) {
+                stop_all_notes();
+                PLAY_SONG(song_sonic_ring);
+            }
+            return false;
+        case S_ZELDA:
+            if (record->event.pressed) {
+                stop_all_notes();
+                PLAY_SONG(song_zelda_puzzle);
+            }
+            return false;
+    }
+    return true;
+}
index fdf244ad50a55e29f6ea8fd673d97c705f369da4..350696736bea3fd8aa9dce2b42ed44284f25e4f8 100644 (file)
@@ -23,7 +23,7 @@
 void backlight_init_ports(void) {
     printf("backlight_init_ports()\n");
     #ifdef BACKLIGHT_ENABLE
-    palSetPadMode(GPIOB, 8,  PAL_MODE_OUTPUT_PUSHPULL);
+    palSetPadMode(GPIOB, 8, PAL_MODE_OUTPUT_PUSHPULL);
     palSetPad(GPIOB, 8);
     #endif
 }
@@ -41,13 +41,8 @@ void backlight_set(uint8_t level) {
     #endif
 }
 
-void led_init_ports() {
-    printf("led_init_ports()\n");
-    palSetPadMode(GPIOB, 7,  PAL_MODE_OUTPUT_PUSHPULL);
-}
-
 void led_set_kb(uint8_t usb_led) {
-    printf("led_init_ports()\n");
+    printf("led_set_kb(%d)\n", usb_led);
     if (usb_led & (1<<USB_LED_CAPS_LOCK)) {
         // Turn capslock on
         palSetPad(GPIOB, 7);
index 4023bc03cf2e1e509fbbd08a7fb7cda303ca067c..7c38a3bd45a155e6b114fbc010a8134fe843a697 100644 (file)
@@ -71,10 +71,7 @@ void matrix_init(void) {
     memset(matrix, 0, MATRIX_ROWS * sizeof(matrix_row_t));
     memset(matrix_debouncing, 0, MATRIX_COLS * sizeof(matrix_row_t));
 
-    /* Setup capslock */
-    // palSetPadMode(GPIOB, 7,  PAL_MODE_OUTPUT_PUSHPULL);
-    // palClearPad(GPIOB, 7);
-
+    palClearPad(GPIOB, 7);  // Turn off capslock
     matrix_init_quantum();
 }
 
@@ -138,6 +135,7 @@ uint8_t matrix_scan(void) {
             debouncing_time = timer_read();
         }
     }
+
     if (debouncing && timer_elapsed(debouncing_time) > DEBOUNCE) {
         for (int row = 0; row < MATRIX_ROWS; row++) {
             matrix[row] = 0;
index 01b7dad9b3857e5d31e2caaa20858f0bd460f436..93e6019a49fe339eaf7a6333a16d30b1098354ca 100644 (file)
@@ -50,5 +50,5 @@ COMMAND_ENABLE = yes    # Commands for debug and configuration
 #SLEEP_LED_ENABLE = yes  # Breathing sleep LED during USB suspend
 NKRO_ENABLE = yes          # USB Nkey Rollover
 CUSTOM_MATRIX = yes # Custom matrix file
-#AUDIO_ENABLE = yes
+AUDIO_ENABLE = yes
 # SERIAL_LINK_ENABLE = yes
index 5ad0c86ecc0b1cf69756aed324dc92c192cda42a..43c8d67c4842f889a25256f494f70a863f4e5a07 100644 (file)
@@ -18,7 +18,6 @@
 #include "ch.h"
 #include "hal.h"
 
-#include <stdio.h>
 #include <string.h>
 #include "print.h"
 #include "keymap.h"
index 647b6956401688345fd51b7d3fe9defbaf5aeb48..065608cccea3af47bd1e283af110c39c70a5aa34 100644 (file)
 
 // Note Timbre
 // Changes how the notes sound
-#define TIMBRE_12       0.125
-#define TIMBRE_25       0.250
-#define TIMBRE_50       0.500
-#define TIMBRE_75       0.750
+#define TIMBRE_12       0.125f
+#define TIMBRE_25       0.250f
+#define TIMBRE_50       0.500f
+#define TIMBRE_75       0.750f
 #define TIMBRE_DEFAULT  TIMBRE_50
 
 // Notes - # = Octave
 
-#define NOTE_REST         0.00
+#define NOTE_REST         0.00f
 
 /* These notes are currently bugged
-#define NOTE_C0          16.35
-#define NOTE_CS0         17.32
-#define NOTE_D0          18.35
-#define NOTE_DS0         19.45
-#define NOTE_E0          20.60
-#define NOTE_F0          21.83
-#define NOTE_FS0         23.12
-#define NOTE_G0          24.50
-#define NOTE_GS0         25.96
-#define NOTE_A0          27.50
-#define NOTE_AS0         29.14
-#define NOTE_B0          30.87
-#define NOTE_C1          32.70
-#define NOTE_CS1         34.65
-#define NOTE_D1          36.71
-#define NOTE_DS1         38.89
-#define NOTE_E1          41.20
-#define NOTE_F1          43.65
-#define NOTE_FS1         46.25
-#define NOTE_G1          49.00
-#define NOTE_GS1         51.91
-#define NOTE_A1          55.00
-#define NOTE_AS1         58.27
+#define NOTE_C0          16.35f
+#define NOTE_CS0         17.32f
+#define NOTE_D0          18.35f
+#define NOTE_DS0         19.45f
+#define NOTE_E0          20.60f
+#define NOTE_F0          21.83f
+#define NOTE_FS0         23.12f
+#define NOTE_G0          24.50f
+#define NOTE_GS0         25.96f
+#define NOTE_A0          27.50f
+#define NOTE_AS0         29.14f
+#define NOTE_B0          30.87f
+#define NOTE_C1          32.70f
+#define NOTE_CS1         34.65f
+#define NOTE_D1          36.71f
+#define NOTE_DS1         38.89f
+#define NOTE_E1          41.20f
+#define NOTE_F1          43.65f
+#define NOTE_FS1         46.25f
+#define NOTE_G1          49.00f
+#define NOTE_GS1         51.91f
+#define NOTE_A1          55.00f
+#define NOTE_AS1         58.27f
 */
 
-#define NOTE_B1          61.74
-#define NOTE_C2          65.41
-#define NOTE_CS2         69.30
-#define NOTE_D2          73.42
-#define NOTE_DS2         77.78
-#define NOTE_E2          82.41
-#define NOTE_F2          87.31
-#define NOTE_FS2         92.50
-#define NOTE_G2          98.00
-#define NOTE_GS2        103.83
-#define NOTE_A2         110.00
-#define NOTE_AS2        116.54
-#define NOTE_B2         123.47
-#define NOTE_C3         130.81
-#define NOTE_CS3        138.59
-#define NOTE_D3         146.83
-#define NOTE_DS3        155.56
-#define NOTE_E3         164.81
-#define NOTE_F3         174.61
-#define NOTE_FS3        185.00
-#define NOTE_G3         196.00
-#define NOTE_GS3        207.65
-#define NOTE_A3         220.00
-#define NOTE_AS3        233.08
-#define NOTE_B3         246.94
-#define NOTE_C4         261.63
-#define NOTE_CS4        277.18
-#define NOTE_D4         293.66
-#define NOTE_DS4        311.13
-#define NOTE_E4         329.63
-#define NOTE_F4         349.23
-#define NOTE_FS4        369.99
-#define NOTE_G4         392.00
-#define NOTE_GS4        415.30
-#define NOTE_A4         440.00
-#define NOTE_AS4        466.16
-#define NOTE_B4         493.88
-#define NOTE_C5         523.25
-#define NOTE_CS5        554.37
-#define NOTE_D5         587.33
-#define NOTE_DS5        622.25
-#define NOTE_E5         659.26
-#define NOTE_F5         698.46
-#define NOTE_FS5        739.99
-#define NOTE_G5         783.99
-#define NOTE_GS5        830.61
-#define NOTE_A5         880.00
-#define NOTE_AS5        932.33
-#define NOTE_B5         987.77
-#define NOTE_C6        1046.50
-#define NOTE_CS6       1108.73
-#define NOTE_D6        1174.66
-#define NOTE_DS6       1244.51
-#define NOTE_E6        1318.51
-#define NOTE_F6        1396.91
-#define NOTE_FS6       1479.98
-#define NOTE_G6        1567.98
-#define NOTE_GS6       1661.22
-#define NOTE_A6        1760.00
-#define NOTE_AS6       1864.66
-#define NOTE_B6        1975.53
-#define NOTE_C7        2093.00
-#define NOTE_CS7       2217.46
-#define NOTE_D7        2349.32
-#define NOTE_DS7       2489.02
-#define NOTE_E7        2637.02
-#define NOTE_F7        2793.83
-#define NOTE_FS7       2959.96
-#define NOTE_G7        3135.96
-#define NOTE_GS7       3322.44
-#define NOTE_A7        3520.00
-#define NOTE_AS7       3729.31
-#define NOTE_B7        3951.07
-#define NOTE_C8        4186.01
-#define NOTE_CS8       4434.92
-#define NOTE_D8        4698.64
-#define NOTE_DS8       4978.03
-#define NOTE_E8        5274.04
-#define NOTE_F8        5587.65
-#define NOTE_FS8       5919.91
-#define NOTE_G8        6271.93
-#define NOTE_GS8       6644.88
-#define NOTE_A8        7040.00
-#define NOTE_AS8       7458.62
-#define NOTE_B8        7902.13
+#define NOTE_B1          61.74f
+#define NOTE_C2          65.41f
+#define NOTE_CS2         69.30f
+#define NOTE_D2          73.42f
+#define NOTE_DS2         77.78f
+#define NOTE_E2          82.41f
+#define NOTE_F2          87.31f
+#define NOTE_FS2         92.50f
+#define NOTE_G2          98.00f
+#define NOTE_GS2        103.83f
+#define NOTE_A2         110.00f
+#define NOTE_AS2        116.54f
+#define NOTE_B2         123.47f
+#define NOTE_C3         130.81f
+#define NOTE_CS3        138.59f
+#define NOTE_D3         146.83f
+#define NOTE_DS3        155.56f
+#define NOTE_E3         164.81f
+#define NOTE_F3         174.61f
+#define NOTE_FS3        185.00f
+#define NOTE_G3         196.00f
+#define NOTE_GS3        207.65f
+#define NOTE_A3         220.00f
+#define NOTE_AS3        233.08f
+#define NOTE_B3         246.94f
+#define NOTE_C4         261.63f
+#define NOTE_CS4        277.18f
+#define NOTE_D4         293.66f
+#define NOTE_DS4        311.13f
+#define NOTE_E4         329.63f
+#define NOTE_F4         349.23f
+#define NOTE_FS4        369.99f
+#define NOTE_G4         392.00f
+#define NOTE_GS4        415.30f
+#define NOTE_A4         440.00f
+#define NOTE_AS4        466.16f
+#define NOTE_B4         493.88f
+#define NOTE_C5         523.25f
+#define NOTE_CS5        554.37f
+#define NOTE_D5         587.33f
+#define NOTE_DS5        622.25f
+#define NOTE_E5         659.26f
+#define NOTE_F5         698.46f
+#define NOTE_FS5        739.99f
+#define NOTE_G5         783.99f
+#define NOTE_GS5        830.61f
+#define NOTE_A5         880.00f
+#define NOTE_AS5        932.33f
+#define NOTE_B5         987.77f
+#define NOTE_C6        1046.50f
+#define NOTE_CS6       1108.73f
+#define NOTE_D6        1174.66f
+#define NOTE_DS6       1244.51f
+#define NOTE_E6        1318.51f
+#define NOTE_F6        1396.91f
+#define NOTE_FS6       1479.98f
+#define NOTE_G6        1567.98f
+#define NOTE_GS6       1661.22f
+#define NOTE_A6        1760.00f
+#define NOTE_AS6       1864.66f
+#define NOTE_B6        1975.53f
+#define NOTE_C7        2093.00f
+#define NOTE_CS7       2217.46f
+#define NOTE_D7        2349.32f
+#define NOTE_DS7       2489.02f
+#define NOTE_E7        2637.02f
+#define NOTE_F7        2793.83f
+#define NOTE_FS7       2959.96f
+#define NOTE_G7        3135.96f
+#define NOTE_GS7       3322.44f
+#define NOTE_A7        3520.00f
+#define NOTE_AS7       3729.31f
+#define NOTE_B7        3951.07f
+#define NOTE_C8        4186.01f
+#define NOTE_CS8       4434.92f
+#define NOTE_D8        4698.64f
+#define NOTE_DS8       4978.03f
+#define NOTE_E8        5274.04f
+#define NOTE_F8        5587.65f
+#define NOTE_FS8       5919.91f
+#define NOTE_G8        6271.93f
+#define NOTE_GS8       6644.88f
+#define NOTE_A8        7040.00f
+#define NOTE_AS8       7458.62f
+#define NOTE_B8        7902.13f
 
 // Flat Aliases
 #define NOTE_DF0 NOTE_CS0
index 091f59e7ac0d3d30ec3da9800ab3ea165978732b..4018f817c24952c37f7f966922d1d25b0f60c9ce 100644 (file)
     E__NOTE(_CS4), E__NOTE(_B4),  QD_NOTE(_AS4), \
     E__NOTE(_AS4), E__NOTE(_AS4), QD_NOTE(_B4),
 
+#define CLUEBOARD_SOUND \
+    HD_NOTE(_C3), HD_NOTE(_D3), HD_NOTE(_E3), HD_NOTE(_F3), HD_NOTE(_G3), HD_NOTE(_A4), HD_NOTE(_B4), HD_NOTE(_C4)
+/*
+    HD_NOTE(_G3), HD_NOTE(_E3), HD_NOTE(_C3), \
+    Q__NOTE(_E3), Q__NOTE(_C3), Q__NOTE(_G3), \
+    Q__NOTE(_E3)
+*/
+/*
+    HD_NOTE(_C3), HD_NOTE(_G3), HD_NOTE(_E3), \
+    Q__NOTE(_G3), Q__NOTE(_E3), Q__NOTE(_G3), \
+    Q__NOTE(_F3)
+*/
+
+#define BASKET_CASE \
+    QD_NOTE(_G3), E__NOTE(_F3), E__NOTE(_E3), Q__NOTE(_F3), M__NOTE(_G3, 8+32), Q__NOTE(_REST), \
+    Q__NOTE(_B4), Q__NOTE(_C4), Q__NOTE(_B4), E__NOTE(_A4), Q__NOTE(_G3), M__NOTE(_G3, 8+32), Q__NOTE(_REST), \
+    Q__NOTE(_B4), Q__NOTE(_C4), Q__NOTE(_B4), E__NOTE(_A4), Q__NOTE(_G3), Q__NOTE(_G3), Q__NOTE(_G3), Q__NOTE(_G3), E__NOTE(_A4), E__NOTE(_C4), QD_NOTE(_B4), HD_NOTE(_B4)
+
 #define STARTUP_SOUND  \
     E__NOTE(_E6),     \
     E__NOTE(_A6),     \