mirror of
https://github.com/qmk/qmk_firmware
synced 2024-11-10 05:59:44 +00:00
audio enable stored in eeprom
This commit is contained in:
parent
9111963663
commit
0faa18eab9
7 changed files with 89 additions and 10 deletions
|
@ -135,7 +135,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
|||
*/
|
||||
[_AD] = {
|
||||
{_______, RESET, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_DEL},
|
||||
{_______, _______, _______, _______, _______, _______, _______, M(M_QW), M(M_CM), M(M_DV), _______, _______},
|
||||
{_______, _______, _______, _______, M(6), _______, _______, M(M_QW), M(M_CM), M(M_DV), _______, _______},
|
||||
{_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______},
|
||||
{_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______}
|
||||
}
|
||||
|
@ -231,6 +231,11 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
|
|||
unregister_code(KC_RSFT);
|
||||
}
|
||||
break;
|
||||
case 6:
|
||||
if (record->event.pressed) {
|
||||
audio_toggle();
|
||||
}
|
||||
break;
|
||||
}
|
||||
return MACRO_NONE;
|
||||
};
|
||||
|
|
|
@ -139,8 +139,8 @@ COMMAND_ENABLE = yes # Commands for debug and configuration
|
|||
# SLEEP_LED_ENABLE = yes # Breathing sleep LED during USB suspend
|
||||
# NKRO_ENABLE = yes # USB Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
|
||||
BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality
|
||||
MIDI_ENABLE = YES # MIDI controls
|
||||
AUDIO_ENABLE = YES # Audio output on port C6
|
||||
MIDI_ENABLE = yes # MIDI controls
|
||||
AUDIO_ENABLE = yes # Audio output on port C6
|
||||
# UNICODE_ENABLE = YES # Unicode
|
||||
# BLUETOOTH_ENABLE = yes # Enable Bluetooth with the Adafruit EZ-Key HID
|
||||
# RGBLIGHT_ENABLE = yes # Enable WS2812 RGB underlight. Do not enable this with MIDI at the same time.
|
||||
|
|
|
@ -59,11 +59,11 @@ const uint16_t PROGMEM fn_actions[] = {
|
|||
};
|
||||
|
||||
float start_up[][2] = {
|
||||
{440.0*pow(2.0,(67)/12.0), 600},
|
||||
{440.0*pow(2.0,(64)/12.0), 400},
|
||||
{440.0*pow(2.0,(55)/12.0), 400},
|
||||
{440.0*pow(2.0,(60)/12.0), 400},
|
||||
{440.0*pow(2.0,(64)/12.0), 1000},
|
||||
{440.0*pow(2.0,(67)/12.0), 4},
|
||||
{440.0*pow(2.0,(64)/12.0), 8},
|
||||
{440.0*pow(2.0,(55)/12.0), 8},
|
||||
{440.0*pow(2.0,(60)/12.0), 8},
|
||||
{440.0*pow(2.0,(64)/12.0), 10},
|
||||
};
|
||||
|
||||
const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
|
||||
|
@ -76,8 +76,10 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
|
|||
#ifdef BACKLIGHT_ENABLE
|
||||
backlight_step();
|
||||
#endif
|
||||
audio_toggle();
|
||||
} else {
|
||||
unregister_code(KC_RSFT);
|
||||
play_notes(&start_up, 5, false);
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
|
|
@ -8,6 +8,8 @@
|
|||
#include "audio.h"
|
||||
#include "keymap_common.h"
|
||||
|
||||
#include "eeconfig.h"
|
||||
|
||||
#define PI 3.14159265
|
||||
|
||||
// #define PWM_AUDIO
|
||||
|
@ -57,6 +59,25 @@ uint8_t notes_length;
|
|||
bool notes_repeat;
|
||||
uint8_t current_note = 0;
|
||||
|
||||
audio_config_t audio_config;
|
||||
|
||||
|
||||
void audio_toggle(void) {
|
||||
audio_config.enable ^= 1;
|
||||
eeconfig_write_audio(audio_config.raw);
|
||||
}
|
||||
|
||||
void audio_on(void) {
|
||||
audio_config.enable = 1;
|
||||
eeconfig_write_audio(audio_config.raw);
|
||||
}
|
||||
|
||||
void audio_off(void) {
|
||||
audio_config.enable = 0;
|
||||
eeconfig_write_audio(audio_config.raw);
|
||||
}
|
||||
|
||||
|
||||
void stop_all_notes() {
|
||||
voices = 0;
|
||||
#ifdef PWM_AUDIO
|
||||
|
@ -129,6 +150,12 @@ void stop_note(double freq) {
|
|||
|
||||
void init_notes() {
|
||||
|
||||
/* check signature */
|
||||
if (!eeconfig_is_enabled()) {
|
||||
eeconfig_init();
|
||||
}
|
||||
audio_config.raw = eeconfig_read_audio();
|
||||
|
||||
#ifdef PWM_AUDIO
|
||||
PLLFRQ = _BV(PDIV2);
|
||||
PLLCSR = _BV(PLLE);
|
||||
|
@ -160,7 +187,6 @@ void init_notes() {
|
|||
|
||||
|
||||
ISR(TIMER3_COMPA_vect) {
|
||||
|
||||
if (note) {
|
||||
#ifdef PWM_AUDIO
|
||||
if (voices == 1) {
|
||||
|
@ -288,9 +314,16 @@ ISR(TIMER3_COMPA_vect) {
|
|||
|
||||
}
|
||||
|
||||
if (!audio_config.enable) {
|
||||
notes = false;
|
||||
note = false;
|
||||
}
|
||||
}
|
||||
|
||||
void play_notes(float (*np)[][2], uint8_t n_length, bool n_repeat) {
|
||||
|
||||
if (audio_config.enable) {
|
||||
|
||||
if (note)
|
||||
stop_all_notes();
|
||||
notes = true;
|
||||
|
@ -319,7 +352,12 @@ void play_notes(float (*np)[][2], uint8_t n_length, bool n_repeat) {
|
|||
#endif
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
void play_sample(uint8_t * s, uint16_t l, bool r) {
|
||||
|
||||
if (audio_config.enable) {
|
||||
|
||||
stop_all_notes();
|
||||
place_int = 0;
|
||||
sample = s;
|
||||
|
@ -330,9 +368,15 @@ void play_sample(uint8_t * s, uint16_t l, bool r) {
|
|||
TIMSK3 |= _BV(OCIE3A);
|
||||
#else
|
||||
#endif
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
void play_note(double freq, int vol) {
|
||||
|
||||
if (audio_config.enable) {
|
||||
|
||||
if (notes)
|
||||
stop_all_notes();
|
||||
note = true;
|
||||
|
@ -367,4 +411,6 @@ void play_note(double freq, int vol) {
|
|||
TCCR3A |= _BV(COM3A1);
|
||||
#endif
|
||||
|
||||
}
|
||||
|
||||
}
|
|
@ -3,9 +3,21 @@
|
|||
#include <avr/io.h>
|
||||
#include <util/delay.h>
|
||||
|
||||
typedef union {
|
||||
uint8_t raw;
|
||||
struct {
|
||||
bool enable :1;
|
||||
uint8_t level :7;
|
||||
};
|
||||
} audio_config_t;
|
||||
|
||||
void audio_toggle(void);
|
||||
void audio_on(void);
|
||||
void audio_off(void);
|
||||
|
||||
void play_sample(uint8_t * s, uint16_t l, bool r);
|
||||
void play_note(double freq, int vol);
|
||||
void stop_note(double freq);
|
||||
void stop_all_notes();
|
||||
void init_notes();
|
||||
void play_notes(float (*np)[][2], uint8_t n_length, bool n_repeat);
|
||||
void play_notes(float (*np)[][2], uint8_t n_length, bool n_repeat);
|
||||
|
|
|
@ -13,6 +13,9 @@ void eeconfig_init(void)
|
|||
#ifdef BACKLIGHT_ENABLE
|
||||
eeprom_write_byte(EECONFIG_BACKLIGHT, 0);
|
||||
#endif
|
||||
#ifdef AUDIO_ENABLE
|
||||
eeprom_write_byte(EECONFIG_AUDIO, 0);
|
||||
#endif
|
||||
}
|
||||
|
||||
void eeconfig_enable(void)
|
||||
|
@ -43,3 +46,8 @@ void eeconfig_write_keymap(uint8_t val) { eeprom_write_byte(EECONFIG_KEYMAP, val
|
|||
uint8_t eeconfig_read_backlight(void) { return eeprom_read_byte(EECONFIG_BACKLIGHT); }
|
||||
void eeconfig_write_backlight(uint8_t val) { eeprom_write_byte(EECONFIG_BACKLIGHT, val); }
|
||||
#endif
|
||||
|
||||
#ifdef AUDIO_ENABLE
|
||||
uint8_t eeconfig_read_audio(void) { return eeprom_read_byte(EECONFIG_AUDIO); }
|
||||
void eeconfig_write_audio(uint8_t val) { eeprom_write_byte(EECONFIG_AUDIO, val); }
|
||||
#endif
|
|
@ -31,6 +31,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|||
#define EECONFIG_KEYMAP (uint8_t *)4
|
||||
#define EECONFIG_MOUSEKEY_ACCEL (uint8_t *)5
|
||||
#define EECONFIG_BACKLIGHT (uint8_t *)6
|
||||
#define EECONFIG_AUDIO (uint8_t *)7
|
||||
|
||||
|
||||
/* debug bit */
|
||||
|
@ -72,4 +73,9 @@ uint8_t eeconfig_read_backlight(void);
|
|||
void eeconfig_write_backlight(uint8_t val);
|
||||
#endif
|
||||
|
||||
#ifdef AUDIO_ENABLE
|
||||
uint8_t eeconfig_read_audio(void);
|
||||
void eeconfig_write_audio(uint8_t val);
|
||||
#endif
|
||||
|
||||
#endif
|
||||
|
|
Loading…
Reference in a new issue