summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorskullydazed <skullydazed@users.noreply.github.com>2018-01-13 20:38:25 -0800
committerJack Humbert <jack.humb@gmail.com>2018-01-13 23:38:25 -0500
commit5836d1a06a7265781fa37acf13e3ba9df7224247 (patch)
treefe4161c2cb1dc28b5eab39c5d97caedc92b7efc8
parentfd359e23e8b46826f480d1bcf21261c3f777e2f4 (diff)
Fix up the ARM audio support (#2136)
* 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
-rw-r--r--common_features.mk6
-rw-r--r--keyboards/clueboard/60/keymaps/default/keymap.c94
-rw-r--r--keyboards/clueboard/60/led.c9
-rw-r--r--keyboards/clueboard/60/matrix.c6
-rw-r--r--keyboards/clueboard/60/rules.mk2
-rw-r--r--quantum/audio/audio_arm.c1
-rw-r--r--quantum/audio/musical_notes.h226
-rw-r--r--quantum/audio/song_list.h18
8 files changed, 230 insertions, 132 deletions
diff --git a/common_features.mk b/common_features.mk
index 319834b5e5..a67cf230f3 100644
--- a/common_features.mk
+++ b/common_features.mk
@@ -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
diff --git a/keyboards/clueboard/60/keymaps/default/keymap.c b/keyboards/clueboard/60/keymaps/default/keymap.c
index 1b0c712640..8397c4bbfb 100644
--- a/keyboards/clueboard/60/keymaps/default/keymap.c
+++ b/keyboards/clueboard/60/keymaps/default/keymap.c
@@ -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;
+}
diff --git a/keyboards/clueboard/60/led.c b/keyboards/clueboard/60/led.c
index fdf244ad50..350696736b 100644
--- a/keyboards/clueboard/60/led.c
+++ b/keyboards/clueboard/60/led.c
@@ -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);
diff --git a/keyboards/clueboard/60/matrix.c b/keyboards/clueboard/60/matrix.c
index 4023bc03cf..7c38a3bd45 100644
--- a/keyboards/clueboard/60/matrix.c
+++ b/keyboards/clueboard/60/matrix.c
@@ -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;
diff --git a/keyboards/clueboard/60/rules.mk b/keyboards/clueboard/60/rules.mk
index 01b7dad9b3..93e6019a49 100644
--- a/keyboards/clueboard/60/rules.mk
+++ b/keyboards/clueboard/60/rules.mk
@@ -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
diff --git a/quantum/audio/audio_arm.c b/quantum/audio/audio_arm.c
index 5ad0c86ecc..43c8d67c48 100644
--- a/quantum/audio/audio_arm.c
+++ b/quantum/audio/audio_arm.c
@@ -18,7 +18,6 @@
#include "ch.h"
#include "hal.h"
-#include <stdio.h>
#include <string.h>
#include "print.h"
#include "keymap.h"
diff --git a/quantum/audio/musical_notes.h b/quantum/audio/musical_notes.h
index 647b695640..065608ccce 100644
--- a/quantum/audio/musical_notes.h
+++ b/quantum/audio/musical_notes.h
@@ -53,127 +53,127 @@
// 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
diff --git a/quantum/audio/song_list.h b/quantum/audio/song_list.h
index 091f59e7ac..4018f817c2 100644
--- a/quantum/audio/song_list.h
+++ b/quantum/audio/song_list.h
@@ -53,6 +53,24 @@
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), \