Backlight Breathing for Planck and Atomic
* Updated personal layouts * tweaked personal * Nightly - Audio Cleanup Refactored the LUTs. Abstracted some of the registers out of audio to use more functional names. Split audio into audio and audio_pwm. WIP * nightly - collapsed code * Added check for note playing to LEDs * Usability tweaks * TWEAE * nightly added extra kcs to keymap common * turned on Plank audio * Added backlight breathing to atomic * reverted accidental merge * adds backlight pulse to planck
This commit is contained in:
File diff suppressed because it is too large
Load Diff
@@ -33,4 +33,20 @@ void process_action_user(keyrecord_t *record);
|
||||
void led_set_user(uint8_t usb_led);
|
||||
void backlight_init_ports(void);
|
||||
|
||||
void breathing_enable(void);
|
||||
void breathing_pulse(void);
|
||||
void breathing_disable(void);
|
||||
void breathing_self_disable(void);
|
||||
void breathing_toggle(void);
|
||||
bool is_breathing(void);
|
||||
|
||||
|
||||
void breathing_defaults(void);
|
||||
void breathing_intensity_default(void);
|
||||
void breathing_speed_default(void);
|
||||
void breathing_speed_set(uint8_t value);
|
||||
void breathing_speed_inc(uint8_t value);
|
||||
void breathing_speed_dec(uint8_t value);
|
||||
|
||||
|
||||
#endif
|
@@ -22,7 +22,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
/* USB Device descriptor parameter */
|
||||
#define VENDOR_ID 0xFEED
|
||||
#define PRODUCT_ID 0x6060
|
||||
#define PRODUCT_ID 0x0419
|
||||
#define DEVICE_VER 0x0001
|
||||
#define MANUFACTURER Ortholinear Keyboards
|
||||
#define PRODUCT The Atomic Keyboard
|
||||
@@ -162,5 +162,4 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
//#define VIBRATO_ENABLE
|
||||
//#define VIBRATO_STRENGTH_ENABLE
|
||||
|
||||
|
||||
#endif
|
||||
|
File diff suppressed because it is too large
Load Diff
@@ -4,7 +4,7 @@ EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
|
||||
CONSOLE_ENABLE = no # Console for debug(+400)
|
||||
COMMAND_ENABLE = yes # Commands for debug and configuration
|
||||
NKRO_ENABLE = yes # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
|
||||
BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
|
||||
BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality
|
||||
MIDI_ENABLE = no # MIDI controls
|
||||
AUDIO_ENABLE = yes # Audio output on port C6
|
||||
UNICODE_ENABLE = no # Unicode
|
||||
|
2
keyboard/planck/keymaps/experimental/README.md
Normal file
2
keyboard/planck/keymaps/experimental/README.md
Normal file
@@ -0,0 +1,2 @@
|
||||
# The Default Planck Layout
|
||||
|
383
keyboard/planck/keymaps/experimental/keymap.c
Normal file
383
keyboard/planck/keymaps/experimental/keymap.c
Normal file
File diff suppressed because it is too large
Load Diff
2
keyboard/planck/keymaps/experimental/makefile.mk
Normal file
2
keyboard/planck/keymaps/experimental/makefile.mk
Normal file
@@ -0,0 +1,2 @@
|
||||
AUDIO_ENABLE = yes
|
||||
NKRO_ENABLE = yes
|
@@ -38,6 +38,7 @@
|
||||
#define MACRO_AUDIO_OFF 17
|
||||
#define MACRO_INC_VOICE 18
|
||||
#define MACRO_DEC_VOICE 19
|
||||
#define MACRO_BACKLIGHT 20
|
||||
|
||||
#define M_QWRTY M(MACRO_QWERTY)
|
||||
#define M_COLMK M(MACRO_COLEMAK)
|
||||
@@ -53,6 +54,7 @@
|
||||
#define TMPO_UP M(MACRO_TEMPO_U)
|
||||
#define TMPO_DN M(MACRO_TEMPO_D)
|
||||
#define TMPO_DF M(MACRO_TONE_DEFAULT)
|
||||
#define M_BACKL M(MACRO_BACKLIGHT)
|
||||
|
||||
|
||||
#define MUS_ON M(MACRO_MUSIC_ON)
|
||||
@@ -217,7 +219,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||
[LAYER_ADJUST] = { /* ADJUST */
|
||||
{ _______, TIMBR_1, TIMBR_2, TIMBR_3, TIMBR_4, TMPO_UP, TMPO_DN, TMPO_DF, MUS_ON, MUS_OFF, AUD_ON, AUD_OFF },
|
||||
{ _______, M_QWRTY, M_COLMK, M_DVORK, _______, _______, _______, _______, _______, _______, _______, _______ },
|
||||
{ _______, _______, _______, _______, _______, RESET, _______, M_MOUSE, _______, _______, _______, _______ },
|
||||
{ _______, _______, _______, _______, M_BACKL, RESET, _______, M_MOUSE, _______, _______, _______, _______ },
|
||||
{ _______, _______, _______, _______, _______, _______, _______, _______, VC_UP, VC_DOWN, _______, _______ },
|
||||
},
|
||||
|
||||
@@ -337,6 +339,15 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
|
||||
}
|
||||
break;
|
||||
|
||||
|
||||
#ifdef BACKLIGHT_ENABLE
|
||||
case MACRO_BACKLIGHT:
|
||||
if (record->event.pressed)
|
||||
{
|
||||
backlight_step();
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifdef MOUSEKEY_ENABLE
|
||||
|
||||
case MACRO_MOUSE:
|
||||
|
@@ -1,12 +1,12 @@
|
||||
BOOTMAGIC_ENABLE = yes # Virtual DIP switch configuration(+1000)
|
||||
MOUSEKEY_ENABLE = yes # Mouse keys(+4700)
|
||||
EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
|
||||
CONSOLE_ENABLE = yes # Console for debug(+400)
|
||||
CONSOLE_ENABLE = no # Console for debug(+400)
|
||||
COMMAND_ENABLE = yes # Commands for debug and configuration
|
||||
NKRO_ENABLE = yes # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
|
||||
BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
|
||||
BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality
|
||||
MIDI_ENABLE = no # MIDI controls
|
||||
AUDIO_ENABLE = no # Audio output on port C6
|
||||
AUDIO_ENABLE = yes # Audio output on port C6
|
||||
UNICODE_ENABLE = no # Unicode
|
||||
BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
|
||||
RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time.
|
||||
|
@@ -9,6 +9,9 @@ void matrix_scan_user(void) {}
|
||||
__attribute__ ((weak))
|
||||
void process_action_user(keyrecord_t *record) {}
|
||||
|
||||
__attribute__ ((weak))
|
||||
void led_set_user(uint8_t usb_led) {}
|
||||
|
||||
void matrix_init_kb(void) {
|
||||
#ifdef BACKLIGHT_ENABLE
|
||||
backlight_init_ports();
|
||||
@@ -33,8 +36,22 @@ void process_action_kb(keyrecord_t *record) {
|
||||
process_action_user(record);
|
||||
}
|
||||
|
||||
void led_set_kb(uint8_t usb_led) {
|
||||
// put your keyboard LED indicator (ex: Caps Lock LED) toggling code here
|
||||
|
||||
led_set_user(usb_led);
|
||||
}
|
||||
|
||||
#ifdef BACKLIGHT_ENABLE
|
||||
#define CHANNEL OCR1C
|
||||
#define BREATHING_NO_HALT 0
|
||||
#define BREATHING_HALT_OFF 1
|
||||
#define BREATHING_HALT_ON 2
|
||||
|
||||
static uint8_t breath_intensity;
|
||||
static uint8_t breath_speed;
|
||||
static uint16_t breathing_index;
|
||||
static uint8_t breathing_halt;
|
||||
|
||||
void backlight_init_ports()
|
||||
{
|
||||
@@ -60,22 +77,22 @@ void backlight_init_ports()
|
||||
TCCR1B = _BV(WGM13) | _BV(WGM12) | _BV(CS10); // = 0b00011001;
|
||||
|
||||
backlight_init();
|
||||
breathing_defaults();
|
||||
}
|
||||
|
||||
void backlight_set(uint8_t level)
|
||||
{
|
||||
// Prevent backlight blink on lowest level
|
||||
PORTB &= ~(_BV(PORTB7));
|
||||
|
||||
if ( level == 0 )
|
||||
{
|
||||
// Turn off PWM control on PB7, revert to output low.
|
||||
TCCR1A &= ~(_BV(COM1C1));
|
||||
CHANNEL = 0x0;
|
||||
// Prevent backlight blink on lowest level
|
||||
PORTB &= ~(_BV(PORTB7));
|
||||
}
|
||||
else if ( level == BACKLIGHT_LEVELS )
|
||||
{
|
||||
// Prevent backlight blink on lowest level
|
||||
PORTB &= ~(_BV(PORTB7));
|
||||
// Turn on PWM control of PB7
|
||||
TCCR1A |= _BV(COM1C1);
|
||||
// Set the brightness
|
||||
@@ -83,13 +100,205 @@ void backlight_set(uint8_t level)
|
||||
}
|
||||
else
|
||||
{
|
||||
// Prevent backlight blink on lowest level
|
||||
PORTB &= ~(_BV(PORTB7));
|
||||
// Turn on PWM control of PB7
|
||||
TCCR1A |= _BV(COM1C1);
|
||||
// Set the brightness
|
||||
CHANNEL = 0xFFFF >> ((BACKLIGHT_LEVELS - level) * ((BACKLIGHT_LEVELS + 1) / 2));
|
||||
}
|
||||
breathing_intensity_default();
|
||||
}
|
||||
|
||||
|
||||
void breathing_enable(void)
|
||||
{
|
||||
if (get_backlight_level() == 0)
|
||||
{
|
||||
breathing_index = 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
// Set breathing_index to be at the midpoint (brightest point)
|
||||
breathing_index = 0x20 << breath_speed;
|
||||
}
|
||||
|
||||
breathing_halt = BREATHING_NO_HALT;
|
||||
|
||||
// Enable breathing interrupt
|
||||
TIMSK1 |= _BV(OCIE1A);
|
||||
}
|
||||
|
||||
void breathing_pulse(void)
|
||||
{
|
||||
if (get_backlight_level() == 0)
|
||||
{
|
||||
breathing_index = 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
// Set breathing_index to be at the midpoint + 1 (brightest point)
|
||||
breathing_index = 0x21 << breath_speed;
|
||||
}
|
||||
|
||||
breathing_halt = BREATHING_HALT_ON;
|
||||
|
||||
// Enable breathing interrupt
|
||||
TIMSK1 |= _BV(OCIE1A);
|
||||
}
|
||||
|
||||
void breathing_disable(void)
|
||||
{
|
||||
// Disable breathing interrupt
|
||||
TIMSK1 &= ~_BV(OCIE1A);
|
||||
backlight_set(get_backlight_level());
|
||||
}
|
||||
|
||||
void breathing_self_disable(void)
|
||||
{
|
||||
if (get_backlight_level() == 0)
|
||||
{
|
||||
breathing_halt = BREATHING_HALT_OFF;
|
||||
}
|
||||
else
|
||||
{
|
||||
breathing_halt = BREATHING_HALT_ON;
|
||||
}
|
||||
|
||||
//backlight_set(get_backlight_level());
|
||||
}
|
||||
|
||||
void breathing_toggle(void)
|
||||
{
|
||||
if (!is_breathing())
|
||||
{
|
||||
if (get_backlight_level() == 0)
|
||||
{
|
||||
breathing_index = 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
// Set breathing_index to be at the midpoint + 1 (brightest point)
|
||||
breathing_index = 0x21 << breath_speed;
|
||||
}
|
||||
|
||||
breathing_halt = BREATHING_NO_HALT;
|
||||
}
|
||||
|
||||
// Toggle breathing interrupt
|
||||
TIMSK1 ^= _BV(OCIE1A);
|
||||
|
||||
// Restore backlight level
|
||||
if (!is_breathing())
|
||||
{
|
||||
backlight_set(get_backlight_level());
|
||||
}
|
||||
}
|
||||
|
||||
bool is_breathing(void)
|
||||
{
|
||||
return (TIMSK1 && _BV(OCIE1A));
|
||||
}
|
||||
|
||||
void breathing_intensity_default(void)
|
||||
{
|
||||
//breath_intensity = (uint8_t)((uint16_t)100 * (uint16_t)get_backlight_level() / (uint16_t)BACKLIGHT_LEVELS);
|
||||
breath_intensity = ((BACKLIGHT_LEVELS - get_backlight_level()) * ((BACKLIGHT_LEVELS + 1) / 2));
|
||||
}
|
||||
|
||||
void breathing_intensity_set(uint8_t value)
|
||||
{
|
||||
breath_intensity = value;
|
||||
}
|
||||
|
||||
void breathing_speed_default(void)
|
||||
{
|
||||
breath_speed = 4;
|
||||
}
|
||||
|
||||
void breathing_speed_set(uint8_t value)
|
||||
{
|
||||
bool is_breathing_now = is_breathing();
|
||||
uint8_t old_breath_speed = breath_speed;
|
||||
|
||||
if (is_breathing_now)
|
||||
{
|
||||
// Disable breathing interrupt
|
||||
TIMSK1 &= ~_BV(OCIE1A);
|
||||
}
|
||||
|
||||
breath_speed = value;
|
||||
|
||||
if (is_breathing_now)
|
||||
{
|
||||
// Adjust index to account for new speed
|
||||
breathing_index = (( (uint8_t)( (breathing_index) >> old_breath_speed ) ) & 0x3F) << breath_speed;
|
||||
|
||||
// Enable breathing interrupt
|
||||
TIMSK1 |= _BV(OCIE1A);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
void breathing_speed_inc(uint8_t value)
|
||||
{
|
||||
if ((uint16_t)(breath_speed - value) > 10 )
|
||||
{
|
||||
breathing_speed_set(0);
|
||||
}
|
||||
else
|
||||
{
|
||||
breathing_speed_set(breath_speed - value);
|
||||
}
|
||||
}
|
||||
|
||||
void breathing_speed_dec(uint8_t value)
|
||||
{
|
||||
if ((uint16_t)(breath_speed + value) > 10 )
|
||||
{
|
||||
breathing_speed_set(10);
|
||||
}
|
||||
else
|
||||
{
|
||||
breathing_speed_set(breath_speed + value);
|
||||
}
|
||||
}
|
||||
|
||||
void breathing_defaults(void)
|
||||
{
|
||||
breathing_intensity_default();
|
||||
breathing_speed_default();
|
||||
breathing_halt = BREATHING_NO_HALT;
|
||||
}
|
||||
|
||||
/* Breathing Sleep LED brighness(PWM On period) table
|
||||
* (64[steps] * 4[duration]) / 64[PWM periods/s] = 4 second breath cycle
|
||||
*
|
||||
* http://www.wolframalpha.com/input/?i=%28sin%28+x%2F64*pi%29**8+*+255%2C+x%3D0+to+63
|
||||
* (0..63).each {|x| p ((sin(x/64.0*PI)**8)*255).to_i }
|
||||
*/
|
||||
static const uint8_t breathing_table[64] PROGMEM = {
|
||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 4, 6, 10,
|
||||
15, 23, 32, 44, 58, 74, 93, 113, 135, 157, 179, 199, 218, 233, 245, 252,
|
||||
255, 252, 245, 233, 218, 199, 179, 157, 135, 113, 93, 74, 58, 44, 32, 23,
|
||||
15, 10, 6, 4, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||
};
|
||||
|
||||
ISR(TIMER1_COMPA_vect)
|
||||
{
|
||||
// CHANNEL = (pgm_read_byte(&breathing_table[ ( (uint8_t)( (breathing_index++) >> breath_speed ) ) & 0x3F ] )) * breath_intensity;
|
||||
|
||||
|
||||
uint8_t local_index = ( (uint8_t)( (breathing_index++) >> breath_speed ) ) & 0x3F;
|
||||
|
||||
if (((breathing_halt == BREATHING_HALT_ON) && (local_index == 0x20)) || ((breathing_halt == BREATHING_HALT_OFF) && (local_index == 0x3F)))
|
||||
{
|
||||
// Disable breathing interrupt
|
||||
TIMSK1 &= ~_BV(OCIE1A);
|
||||
}
|
||||
|
||||
CHANNEL = (uint16_t)(((uint16_t)pgm_read_byte(&breathing_table[local_index]) * 257)) >> breath_intensity;
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
#endif
|
@@ -45,4 +45,22 @@ void matrix_init_user(void);
|
||||
void matrix_scan_user(void);
|
||||
void process_action_user(keyrecord_t *record);
|
||||
|
||||
void led_set_user(uint8_t usb_led);
|
||||
void backlight_init_ports(void);
|
||||
|
||||
void breathing_enable(void);
|
||||
void breathing_pulse(void);
|
||||
void breathing_disable(void);
|
||||
void breathing_self_disable(void);
|
||||
void breathing_toggle(void);
|
||||
bool is_breathing(void);
|
||||
|
||||
|
||||
void breathing_defaults(void);
|
||||
void breathing_intensity_default(void);
|
||||
void breathing_speed_default(void);
|
||||
void breathing_speed_set(uint8_t value);
|
||||
void breathing_speed_inc(uint8_t value);
|
||||
void breathing_speed_dec(uint8_t value);
|
||||
|
||||
#endif
|
||||
|
@@ -374,6 +374,10 @@ bool is_playing_notes(void) {
|
||||
return playing_notes;
|
||||
}
|
||||
|
||||
bool is_audio_on(void) {
|
||||
return (audio_config.enable != 0);
|
||||
}
|
||||
|
||||
void audio_toggle(void) {
|
||||
audio_config.enable ^= 1;
|
||||
eeconfig_update_audio(audio_config.raw);
|
||||
|
@@ -25,6 +25,7 @@ typedef union {
|
||||
};
|
||||
} audio_config_t;
|
||||
|
||||
bool is_audio_on(void);
|
||||
void audio_toggle(void);
|
||||
void audio_on(void);
|
||||
void audio_off(void);
|
||||
@@ -71,11 +72,11 @@ void stop_note(float freq);
|
||||
void stop_all_notes(void);
|
||||
void play_notes(float (*np)[][2], uint16_t n_count, bool n_repeat, float n_rest);
|
||||
|
||||
#define SCALE (int []){ 0 + (12*0), 2 + (12*0), 4 + (12*0), 5 + (12*0), 7 + (12*0), 9 + (12*0), 11 + (12*0), \
|
||||
0 + (12*1), 2 + (12*1), 4 + (12*1), 5 + (12*1), 7 + (12*1), 9 + (12*1), 11 + (12*1), \
|
||||
0 + (12*2), 2 + (12*2), 4 + (12*2), 5 + (12*2), 7 + (12*2), 9 + (12*2), 11 + (12*2), \
|
||||
0 + (12*3), 2 + (12*3), 4 + (12*3), 5 + (12*3), 7 + (12*3), 9 + (12*3), 11 + (12*3), \
|
||||
0 + (12*4), 2 + (12*4), 4 + (12*4), 5 + (12*4), 7 + (12*4), 9 + (12*4), 11 + (12*4), }
|
||||
#define SCALE (int8_t []){ 0 + (12*0), 2 + (12*0), 4 + (12*0), 5 + (12*0), 7 + (12*0), 9 + (12*0), 11 + (12*0), \
|
||||
0 + (12*1), 2 + (12*1), 4 + (12*1), 5 + (12*1), 7 + (12*1), 9 + (12*1), 11 + (12*1), \
|
||||
0 + (12*2), 2 + (12*2), 4 + (12*2), 5 + (12*2), 7 + (12*2), 9 + (12*2), 11 + (12*2), \
|
||||
0 + (12*3), 2 + (12*3), 4 + (12*3), 5 + (12*3), 7 + (12*3), 9 + (12*3), 11 + (12*3), \
|
||||
0 + (12*4), 2 + (12*4), 4 + (12*4), 5 + (12*4), 7 + (12*4), 9 + (12*4), 11 + (12*4), }
|
||||
|
||||
// These macros are used to allow play_notes to play an array of indeterminate
|
||||
// length. This works around the limitation of C's sizeof operation on pointers.
|
||||
|
@@ -87,8 +87,11 @@ extern const uint16_t fn_actions[];
|
||||
#define KC_EXCLAIM KC_EXLM
|
||||
|
||||
#define KC_AT LSFT(KC_2) // @
|
||||
|
||||
|
||||
#define KC_HASH LSFT(KC_3) // #
|
||||
|
||||
|
||||
#define KC_DLR LSFT(KC_4) // $
|
||||
#define KC_DOLLAR KC_DLR
|
||||
|
||||
@@ -110,11 +113,13 @@ extern const uint16_t fn_actions[];
|
||||
#define KC_RPRN LSFT(KC_0) // )
|
||||
#define KC_RIGHT_PAREN KC_RPRN
|
||||
|
||||
|
||||
#define KC_UNDS LSFT(KC_MINS) // _
|
||||
#define KC_UNDERSCORE KC_UNDS
|
||||
|
||||
#define KC_PLUS LSFT(KC_EQL) // +
|
||||
|
||||
|
||||
#define KC_LCBR LSFT(KC_LBRC) // {
|
||||
#define KC_LEFT_CURLY_BRACE KC_LCBR
|
||||
|
||||
@@ -132,6 +137,19 @@ extern const uint16_t fn_actions[];
|
||||
|
||||
#define KC_PIPE LSFT(KC_BSLS) // |
|
||||
|
||||
#define KC_LT LSFT(KC_COMM) // <
|
||||
|
||||
|
||||
#define KC_GT LSFT(KC_DOT) // >
|
||||
|
||||
|
||||
#define KC_QUES LSFT(KC_SLSH) // ?
|
||||
#define KC_QUESTION KC_QUES
|
||||
|
||||
|
||||
#define KC_DQT LSFT(KC_QUOT) // "
|
||||
#define KC_DOUBLE_QUOTE KC_DQT
|
||||
|
||||
#define KC_DELT KC_DELETE // Del key (four letter code)
|
||||
|
||||
// Alias for function layers than expand past FN31
|
||||
|
@@ -25,11 +25,11 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
#define CHNL(note, channel) (note + (channel << 8))
|
||||
|
||||
#define SCALE (int []){ 0 + (12*0), 2 + (12*0), 4 + (12*0), 5 + (12*0), 7 + (12*0), 9 + (12*0), 11 + (12*0), \
|
||||
0 + (12*1), 2 + (12*1), 4 + (12*1), 5 + (12*1), 7 + (12*1), 9 + (12*1), 11 + (12*1), \
|
||||
0 + (12*2), 2 + (12*2), 4 + (12*2), 5 + (12*2), 7 + (12*2), 9 + (12*2), 11 + (12*2), \
|
||||
0 + (12*3), 2 + (12*3), 4 + (12*3), 5 + (12*3), 7 + (12*3), 9 + (12*3), 11 + (12*3), \
|
||||
0 + (12*4), 2 + (12*4), 4 + (12*4), 5 + (12*4), 7 + (12*4), 9 + (12*4), 11 + (12*4), }
|
||||
#define SCALE (int8_t []){ 0 + (12*0), 2 + (12*0), 4 + (12*0), 5 + (12*0), 7 + (12*0), 9 + (12*0), 11 + (12*0), \
|
||||
0 + (12*1), 2 + (12*1), 4 + (12*1), 5 + (12*1), 7 + (12*1), 9 + (12*1), 11 + (12*1), \
|
||||
0 + (12*2), 2 + (12*2), 4 + (12*2), 5 + (12*2), 7 + (12*2), 9 + (12*2), 11 + (12*2), \
|
||||
0 + (12*3), 2 + (12*3), 4 + (12*3), 5 + (12*3), 7 + (12*3), 9 + (12*3), 11 + (12*3), \
|
||||
0 + (12*4), 2 + (12*4), 4 + (12*4), 5 + (12*4), 7 + (12*4), 9 + (12*4), 11 + (12*4), }
|
||||
|
||||
#define N_CN1 (0x600C + (12 * -1) + 0 )
|
||||
#define N_CN1S (0x600C + (12 * -1) + 1 )
|
||||
|
@@ -28,9 +28,9 @@ ifeq ($(strip $(MIDI_ENABLE)), yes)
|
||||
endif
|
||||
|
||||
ifeq ($(strip $(AUDIO_ENABLE)), yes)
|
||||
SRC += $(QUANTUM_DIR)/audio/audio.c
|
||||
SRC += $(QUANTUM_DIR)/audio/voices.c
|
||||
SRC += $(QUANTUM_DIR)/audio/luts.c
|
||||
SRC += $(QUANTUM_DIR)/audio/audio.c
|
||||
SRC += $(QUANTUM_DIR)/audio/voices.c
|
||||
SRC += $(QUANTUM_DIR)/audio/luts.c
|
||||
endif
|
||||
|
||||
ifeq ($(strip $(UNICODE_ENABLE)), yes)
|
||||
|
@@ -83,3 +83,8 @@ void backlight_level(uint8_t level)
|
||||
eeconfig_update_backlight(backlight_config.raw);
|
||||
backlight_set(backlight_config.level);
|
||||
}
|
||||
|
||||
uint8_t get_backlight_level(void)
|
||||
{
|
||||
return backlight_config.level;
|
||||
}
|
@@ -36,5 +36,6 @@ void backlight_toggle(void);
|
||||
void backlight_step(void);
|
||||
void backlight_set(uint8_t level);
|
||||
void backlight_level(uint8_t level);
|
||||
uint8_t get_backlight_level(void);
|
||||
|
||||
#endif
|
||||
|
@@ -357,9 +357,11 @@ static bool command_common(uint8_t code)
|
||||
clear_keyboard(); // clear to prevent stuck keys
|
||||
print("\n\nJumping to bootloader... ");
|
||||
#ifdef AUDIO_ENABLE
|
||||
stop_all_notes();
|
||||
play_goodbye_tone();
|
||||
#else
|
||||
_delay_ms(1000);
|
||||
#endif
|
||||
_delay_ms(1000);
|
||||
bootloader_jump(); // not return
|
||||
break;
|
||||
|
||||
|
@@ -16,10 +16,14 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#ifndef NODEBUG_H
|
||||
#define NODEBUG_H 1
|
||||
#define NODEBUG_H
|
||||
|
||||
#define NO_DEBUG
|
||||
#include "debug.h"
|
||||
#undef NO_DEBUG
|
||||
#ifndef NO_DEBUG
|
||||
#define NO_DEBUG
|
||||
#include "debug.h"
|
||||
#undef NO_DEBUG
|
||||
#else
|
||||
#include "debug.h"
|
||||
#endif
|
||||
|
||||
#endif
|
||||
|
Reference in New Issue
Block a user