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] = {
|
[_AD] = {
|
||||||
{_______, RESET, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_DEL},
|
{_______, 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);
|
unregister_code(KC_RSFT);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
case 6:
|
||||||
|
if (record->event.pressed) {
|
||||||
|
audio_toggle();
|
||||||
|
}
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
return MACRO_NONE;
|
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
|
# 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
|
# 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
|
BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality
|
||||||
MIDI_ENABLE = YES # MIDI controls
|
MIDI_ENABLE = yes # MIDI controls
|
||||||
AUDIO_ENABLE = YES # Audio output on port C6
|
AUDIO_ENABLE = yes # Audio output on port C6
|
||||||
# UNICODE_ENABLE = YES # Unicode
|
# UNICODE_ENABLE = YES # Unicode
|
||||||
# BLUETOOTH_ENABLE = yes # Enable Bluetooth with the Adafruit EZ-Key HID
|
# 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.
|
# 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] = {
|
float start_up[][2] = {
|
||||||
{440.0*pow(2.0,(67)/12.0), 600},
|
{440.0*pow(2.0,(67)/12.0), 4},
|
||||||
{440.0*pow(2.0,(64)/12.0), 400},
|
{440.0*pow(2.0,(64)/12.0), 8},
|
||||||
{440.0*pow(2.0,(55)/12.0), 400},
|
{440.0*pow(2.0,(55)/12.0), 8},
|
||||||
{440.0*pow(2.0,(60)/12.0), 400},
|
{440.0*pow(2.0,(60)/12.0), 8},
|
||||||
{440.0*pow(2.0,(64)/12.0), 1000},
|
{440.0*pow(2.0,(64)/12.0), 10},
|
||||||
};
|
};
|
||||||
|
|
||||||
const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
|
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
|
#ifdef BACKLIGHT_ENABLE
|
||||||
backlight_step();
|
backlight_step();
|
||||||
#endif
|
#endif
|
||||||
|
audio_toggle();
|
||||||
} else {
|
} else {
|
||||||
unregister_code(KC_RSFT);
|
unregister_code(KC_RSFT);
|
||||||
|
play_notes(&start_up, 5, false);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
|
@ -8,6 +8,8 @@
|
||||||
#include "audio.h"
|
#include "audio.h"
|
||||||
#include "keymap_common.h"
|
#include "keymap_common.h"
|
||||||
|
|
||||||
|
#include "eeconfig.h"
|
||||||
|
|
||||||
#define PI 3.14159265
|
#define PI 3.14159265
|
||||||
|
|
||||||
// #define PWM_AUDIO
|
// #define PWM_AUDIO
|
||||||
|
@ -57,6 +59,25 @@ uint8_t notes_length;
|
||||||
bool notes_repeat;
|
bool notes_repeat;
|
||||||
uint8_t current_note = 0;
|
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() {
|
void stop_all_notes() {
|
||||||
voices = 0;
|
voices = 0;
|
||||||
#ifdef PWM_AUDIO
|
#ifdef PWM_AUDIO
|
||||||
|
@ -129,6 +150,12 @@ void stop_note(double freq) {
|
||||||
|
|
||||||
void init_notes() {
|
void init_notes() {
|
||||||
|
|
||||||
|
/* check signature */
|
||||||
|
if (!eeconfig_is_enabled()) {
|
||||||
|
eeconfig_init();
|
||||||
|
}
|
||||||
|
audio_config.raw = eeconfig_read_audio();
|
||||||
|
|
||||||
#ifdef PWM_AUDIO
|
#ifdef PWM_AUDIO
|
||||||
PLLFRQ = _BV(PDIV2);
|
PLLFRQ = _BV(PDIV2);
|
||||||
PLLCSR = _BV(PLLE);
|
PLLCSR = _BV(PLLE);
|
||||||
|
@ -160,7 +187,6 @@ void init_notes() {
|
||||||
|
|
||||||
|
|
||||||
ISR(TIMER3_COMPA_vect) {
|
ISR(TIMER3_COMPA_vect) {
|
||||||
|
|
||||||
if (note) {
|
if (note) {
|
||||||
#ifdef PWM_AUDIO
|
#ifdef PWM_AUDIO
|
||||||
if (voices == 1) {
|
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) {
|
void play_notes(float (*np)[][2], uint8_t n_length, bool n_repeat) {
|
||||||
|
|
||||||
|
if (audio_config.enable) {
|
||||||
|
|
||||||
if (note)
|
if (note)
|
||||||
stop_all_notes();
|
stop_all_notes();
|
||||||
notes = true;
|
notes = true;
|
||||||
|
@ -319,7 +352,12 @@ void play_notes(float (*np)[][2], uint8_t n_length, bool n_repeat) {
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
void play_sample(uint8_t * s, uint16_t l, bool r) {
|
void play_sample(uint8_t * s, uint16_t l, bool r) {
|
||||||
|
|
||||||
|
if (audio_config.enable) {
|
||||||
|
|
||||||
stop_all_notes();
|
stop_all_notes();
|
||||||
place_int = 0;
|
place_int = 0;
|
||||||
sample = s;
|
sample = s;
|
||||||
|
@ -330,9 +368,15 @@ void play_sample(uint8_t * s, uint16_t l, bool r) {
|
||||||
TIMSK3 |= _BV(OCIE3A);
|
TIMSK3 |= _BV(OCIE3A);
|
||||||
#else
|
#else
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void play_note(double freq, int vol) {
|
void play_note(double freq, int vol) {
|
||||||
|
|
||||||
|
if (audio_config.enable) {
|
||||||
|
|
||||||
if (notes)
|
if (notes)
|
||||||
stop_all_notes();
|
stop_all_notes();
|
||||||
note = true;
|
note = true;
|
||||||
|
@ -367,4 +411,6 @@ void play_note(double freq, int vol) {
|
||||||
TCCR3A |= _BV(COM3A1);
|
TCCR3A |= _BV(COM3A1);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
|
@ -3,9 +3,21 @@
|
||||||
#include <avr/io.h>
|
#include <avr/io.h>
|
||||||
#include <util/delay.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_sample(uint8_t * s, uint16_t l, bool r);
|
||||||
void play_note(double freq, int vol);
|
void play_note(double freq, int vol);
|
||||||
void stop_note(double freq);
|
void stop_note(double freq);
|
||||||
void stop_all_notes();
|
void stop_all_notes();
|
||||||
void init_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
|
#ifdef BACKLIGHT_ENABLE
|
||||||
eeprom_write_byte(EECONFIG_BACKLIGHT, 0);
|
eeprom_write_byte(EECONFIG_BACKLIGHT, 0);
|
||||||
#endif
|
#endif
|
||||||
|
#ifdef AUDIO_ENABLE
|
||||||
|
eeprom_write_byte(EECONFIG_AUDIO, 0);
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
void eeconfig_enable(void)
|
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); }
|
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); }
|
void eeconfig_write_backlight(uint8_t val) { eeprom_write_byte(EECONFIG_BACKLIGHT, val); }
|
||||||
#endif
|
#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_KEYMAP (uint8_t *)4
|
||||||
#define EECONFIG_MOUSEKEY_ACCEL (uint8_t *)5
|
#define EECONFIG_MOUSEKEY_ACCEL (uint8_t *)5
|
||||||
#define EECONFIG_BACKLIGHT (uint8_t *)6
|
#define EECONFIG_BACKLIGHT (uint8_t *)6
|
||||||
|
#define EECONFIG_AUDIO (uint8_t *)7
|
||||||
|
|
||||||
|
|
||||||
/* debug bit */
|
/* debug bit */
|
||||||
|
@ -72,4 +73,9 @@ uint8_t eeconfig_read_backlight(void);
|
||||||
void eeconfig_write_backlight(uint8_t val);
|
void eeconfig_write_backlight(uint8_t val);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifdef AUDIO_ENABLE
|
||||||
|
uint8_t eeconfig_read_audio(void);
|
||||||
|
void eeconfig_write_audio(uint8_t val);
|
||||||
|
#endif
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
Loading…
Reference in a new issue