From 64f9779fe54facecdef9d1a6a7c1d893f79ca20e Mon Sep 17 00:00:00 2001 From: lambdalisue Date: Tue, 14 Feb 2017 14:12:54 +0900 Subject: [PATCH 01/91] Add TAPPING_FORCE_HOLD to regulate behaviour See #889 for the detail. --- doc/keymap.md | 3 +++ tmk_core/common/action_tapping.c | 9 +++++---- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/doc/keymap.md b/doc/keymap.md index 6f2a663fc8..2b0d2cd959 100644 --- a/doc/keymap.md +++ b/doc/keymap.md @@ -549,6 +549,9 @@ Layer switching with tap key: [dual_role]: http://en.wikipedia.org/wiki/Modifier_key#Dual-role_keys +When user hold a key after tap, it repeat the tapped key rather to hold a modifier key. +If you prefer to hold a modifier instead, define `TAPPING_FORCE_HOLD` in `config.h`. +See https://github.com/qmk/qmk_firmware/issues/889 for the detail. ### 4.2 Tap Toggle This is a feature to assign both toggle layer and momentary switch layer action to just same one physical key. It works as momentary layer switch when holding a key but toggle switch with several taps. diff --git a/tmk_core/common/action_tapping.c b/tmk_core/common/action_tapping.c index e16e11be7f..66044d8bce 100644 --- a/tmk_core/common/action_tapping.c +++ b/tmk_core/common/action_tapping.c @@ -228,6 +228,7 @@ bool process_tapping(keyrecord_t *keyp) if (WITHIN_TAPPING_TERM(event)) { if (event.pressed) { if (IS_TAPPING_KEY(event.key)) { +#ifndef TAPPING_FORCE_HOLD if (!tapping_key.tap.interrupted && tapping_key.tap.count > 0) { // sequential tap. keyp->tap = tapping_key.tap; @@ -237,11 +238,11 @@ bool process_tapping(keyrecord_t *keyp) tapping_key = *keyp; debug_tapping_key(); return true; - } else { - // FIX: start new tap again - tapping_key = *keyp; - return true; } +#endif + // FIX: start new tap again + tapping_key = *keyp; + return true; } else if (is_tap_key(event.key)) { // Sequential tap can be interfered with other tap key. debug("Tapping: Start with interfering other tap.\n"); From 5ae1411fc387a682d3e22f5cddfe1102e3312af5 Mon Sep 17 00:00:00 2001 From: Gabriel Young Date: Thu, 16 Feb 2017 20:49:02 -0800 Subject: [PATCH 02/91] Expand MIDI key codes --- quantum/quantum_keycodes.h | 114 ++++++++++++++++++++++++++++++++++++- 1 file changed, 113 insertions(+), 1 deletion(-) diff --git a/quantum/quantum_keycodes.h b/quantum/quantum_keycodes.h index 63b626926d..3728fa3664 100644 --- a/quantum/quantum_keycodes.h +++ b/quantum/quantum_keycodes.h @@ -107,10 +107,122 @@ enum quantum_keycodes { MUV_IN, MUV_DE, - // Midi mode on/off +#ifdef MIDI_ENABLE + // Midi MIDI_ON, MIDI_OFF, + MIDI_TONE_MIN, + + MI_C = MIDI_TONE_MIN, + MI_Cs, + MI_Db = MI_Cs, + MI_D, + MI_Ds, + MI_Eb = MI_Ds, + MI_E, + MI_F, + MI_Fs, + MI_Gb = MI_Fs, + MI_G, + MI_Gs, + MI_Ab = MI_Gs, + MI_A, + MI_As, + MI_Bb = MI_As, + MI_B, + + MI_C_1, + MI_Cs_1, + MI_Db_1 = MI_Cs_1, + MI_D_1, + MI_Ds_1, + MI_Eb_1 = MI_Ds_1, + MI_E_1, + MI_F_1, + MI_Fs_1, + MI_Gb_1 = MI_Fs_1, + MI_G_1, + MI_Gs_1, + MI_Ab_1 = MI_Gs_1, + MI_A_1, + MI_As_1, + MI_Bb_1 = MI_As_1, + MI_B_1, + + MI_C_2, + MI_Cs_2, + MI_Db_2 = MI_Cs_2, + MI_D_2, + MI_Ds_2, + MI_Eb_2 = MI_Ds_2, + MI_E_2, + MI_F_2, + MI_Fs_2, + MI_Gb_2 = MI_Fs_2, + MI_G_2, + MI_Gs_2, + MI_Ab_2 = MI_Gs_2, + MI_A_2, + MI_As_2, + MI_Bb_2 = MI_As_2, + MI_B_2, + + MIDI_TONE_MAX = MI_B_2, + + MIDI_OCTAVE_MIN, + MI_OCT_N2 = MIDI_OCTAVE_MIN, + MI_OCT_N1, + MI_OCT_0, + MI_OCT_1, + MI_OCT_2, + MI_OCT_3, + MI_OCT_4, + MI_OCT_5, + MI_OCT_6, + MI_OCT_7, + MIDI_OCTAVE_MAX = MI_OCT_7, + MI_OCTD, // octave down + MI_OCTU, // octave up + + MIDI_VELOCITY_MIN, + MI_VEL_1 = MIDI_VELOCITY_MIN, + MI_VEL_2, + MI_VEL_3, + MI_VEL_5, + MI_VEL_6, + MI_VEL_7, + MI_VEL_8, + MI_VEL_9, + MI_VEL_10, + MIDI_VELOCITY_MAX = MI_VEL_10, + MI_VELD, // velocity down + MI_VELU, // velocity up + + MIDI_CHANNEL_MIN, + MI_CH1 = MIDI_CHANNEL_MIN, + MI_CH2, + MI_CH3, + MI_CH4, + MI_CH5, + MI_CH6, + MI_CH7, + MI_CH8, + MI_CH9, + MI_CH10, + MI_CH11, + MI_CH12, + MI_CH13, + MI_CH14, + MI_CH15, + MI_CH16, + MIDI_CHANNEL_MAX = MI_CH16, + MI_CHD, // previous channel + MI_CHU, // next channel + + MI_SUS, // sustain +#endif + // Backlight functionality BL_0, BL_1, From e405ab4bc6ff47d189d99c4d51aadf60a642d82a Mon Sep 17 00:00:00 2001 From: Gabriel Young Date: Sat, 18 Feb 2017 03:12:13 -0800 Subject: [PATCH 03/91] initial implementation of polyphony using variable length array of notes on --- quantum/process_keycode/process_midi.c | 199 ++++++++++++++++++++++++- quantum/process_keycode/process_midi.h | 3 + quantum/quantum_keycodes.h | 1 + tmk_core/protocol/lufa/lufa.c | 13 +- tmk_core/protocol/lufa/lufa.h | 2 +- 5 files changed, 211 insertions(+), 7 deletions(-) diff --git a/quantum/process_keycode/process_midi.c b/quantum/process_keycode/process_midi.c index 577dad43ac..bc48b39059 100644 --- a/quantum/process_keycode/process_midi.c +++ b/quantum/process_keycode/process_midi.c @@ -1,10 +1,204 @@ #include "process_midi.h" +#if 0 bool midi_activated = false; uint8_t midi_starting_note = 0x0C; int midi_offset = 7; +#endif + +typedef union { + uint16_t raw; + struct { + uint8_t octave :4; + uint8_t velocity :4; + uint8_t channel :4; + }; +} midi_config_t; + +midi_config_t midi_config; + +#define MIDI_INVALID_NOTE 0xFF + +#if 0 +typedef struct { + uint64_t low; + uint64_t high; +} uint128_t; + +#if 0 +static void right_shift_uint128_t(uint128_t* val, uint8_t shift) +{ + uint64_t high_mask = ~0 >> (64 - shift); + uint64_t high_bits = (val->high & high_mask) << (64 - shift); + val->high = val->high >> shift; + val->low = (val->low >> shift) | high_bits; +} +#endif + +static uint64_t left_shift_uint64_t(uint64_t val, uint8_t shift) +{ + dprintf("left_shift_uint64_t(val, %c) ...\n", val, shift); + while (shift > 16u) { + dprintf(" left_shift_uint64_t: val=?, shift=%c\n", val, shift); + val <<= 16; + shift -= 16; + } + dprintf(" left_shift_uint64_t: val=?, shift=%c\n", val, shift); + val <<= shift; + return val; +} + +static void set_bit_uint128_t(uint128_t* val, uint8_t shift) +{ + uint64_t x = 1u; + + if (shift < 64) + { + x = left_shift_uint64_t(x, shift); + dprintf("x: %d\n", x); + dprintf("set_bit_uint128_t (%d): 0x%016X%016X\n", shift, 0, x); + val->low = val->low | left_shift_uint64_t(1u, shift); + } + else + { + x = left_shift_uint64_t(x, shift - 64); + dprintf("set_bit_uint128_t (%d): 0x%016X%016X\n", shift, x, 0); + val->high = val->high | left_shift_uint64_t(1u, shift - 64); + } +} + +static void clear_bit_uint128_t(uint128_t* val, uint8_t shift) +{ + if (shift < 64) + { + val->low = val->low & ~left_shift_uint64_t(1u, shift); + } + else + { + val->high = val->high & ~left_shift_uint64_t(1u, shift - 64); + } +} -bool process_midi(uint16_t keycode, keyrecord_t *record) { +static bool is_bit_set_uint128_t(const uint128_t* val, uint8_t shift) +{ + if (shift < 64) + { + return !!(val->low & (1u << shift)); + } + else + { + return !!(val->high & (1u << (shift - 64))); + } +} + +uint128_t note_status = { 0, 0 }; +#endif + + +#define MIDI_MAX_NOTES_ON 10 + +typedef struct { + uint8_t note; + uint8_t tone; +} midi_notes_on_array_entry_t; + +typedef struct { + uint8_t length; + midi_notes_on_array_entry_t values[MIDI_MAX_NOTES_ON]; +} midi_notes_on_array_t; + +static midi_notes_on_array_t notes_on; + +inline uint8_t compute_velocity(uint8_t setting) +{ + return (setting + 1) * (128 / (MIDI_VELOCITY_MAX - MIDI_VELOCITY_MIN + 1)); +} + +void midi_init(void) +{ + midi_config.octave = MI_OCT_0 - MIDI_OCTAVE_MIN; + midi_config.velocity = (MIDI_VELOCITY_MAX - MIDI_VELOCITY_MIN); + midi_config.channel = 0; + notes_on.length = 0; +} + +bool process_midi(uint16_t keycode, keyrecord_t *record) +{ + switch (keycode) { + case MIDI_TONE_MIN ... MIDI_TONE_MAX: + { + uint8_t channel = midi_config.channel; + uint8_t tone = keycode - MIDI_TONE_MIN; + uint8_t velocity = compute_velocity(midi_config.velocity); + if (record->event.pressed && notes_on.length < MIDI_MAX_NOTES_ON) { + uint8_t note = 12 * midi_config.octave + tone; + midi_send_noteon(&midi_device, channel, note, velocity); + dprintf("midi noteon channel:%d note:%d velocity:%d\n", channel, note, velocity); + notes_on.values[notes_on.length].note = note; + notes_on.values[notes_on.length].tone = tone; + notes_on.length++; + } + else { + for (uint8_t i = 0; i < notes_on.length; i++) { + uint8_t note = notes_on.values[i].note; + if (tone == notes_on.values[i].tone) { + midi_send_noteoff(&midi_device, channel, note, velocity); + dprintf("midi noteoff channel:%d note:%d velocity:%d\n", channel, note, velocity); + + for (uint8_t j=i; j < notes_on.length - 1; j++) + { + notes_on.values[j] = notes_on.values[j + 1]; + } + + notes_on.length--; + break; + } + } + } + return false; + } + case MIDI_OCTAVE_MIN ... MIDI_OCTAVE_MAX: + if (record->event.pressed) + midi_config.octave = keycode - MIDI_OCTAVE_MIN; + return false; + case MI_OCTD: + if (record->event.pressed && midi_config.octave > 0) + midi_config.octave--; + return false; + case MI_OCTU: + if (record->event.pressed && midi_config.octave < (MIDI_OCTAVE_MAX - MIDI_OCTAVE_MIN)) + midi_config.octave++; + return false; + case MIDI_VELOCITY_MIN ... MIDI_VELOCITY_MAX: + if (record->event.pressed) + midi_config.velocity = keycode - MIDI_VELOCITY_MIN; + return false; + case MI_VELD: + if (record->event.pressed && midi_config.velocity > 0) + midi_config.velocity--; + return false; + case MI_VELU: + if (record->event.pressed) + midi_config.velocity++; + return false; + case MIDI_CHANNEL_MIN ... MIDI_CHANNEL_MAX: + if (record->event.pressed) + midi_config.channel = keycode - MIDI_CHANNEL_MIN; + return false; + case MI_CHD: + if (record->event.pressed) + midi_config.channel--; + return false; + case MI_CHU: + if (record->event.pressed) + midi_config.channel++; + return false; + case MI_SUS: + //TODO + return false; + }; + +#if 0 if (keycode == MI_ON && record->event.pressed) { midi_activated = true; #ifdef AUDIO_ENABLE @@ -64,5 +258,6 @@ bool process_midi(uint16_t keycode, keyrecord_t *record) { if (keycode < 0xFF) // ignores all normal keycodes, but lets RAISE, LOWER, etc through return false; } - return true; +#endif + return true; } diff --git a/quantum/process_keycode/process_midi.h b/quantum/process_keycode/process_midi.h index acd4fc1b16..b0e0aeb832 100644 --- a/quantum/process_keycode/process_midi.h +++ b/quantum/process_keycode/process_midi.h @@ -2,6 +2,9 @@ #define PROCESS_MIDI_H #include "quantum.h" +#include "midi.h" + +void midi_init(void); bool process_midi(uint16_t keycode, keyrecord_t *record); diff --git a/quantum/quantum_keycodes.h b/quantum/quantum_keycodes.h index 3728fa3664..a024a96395 100644 --- a/quantum/quantum_keycodes.h +++ b/quantum/quantum_keycodes.h @@ -189,6 +189,7 @@ enum quantum_keycodes { MI_VEL_1 = MIDI_VELOCITY_MIN, MI_VEL_2, MI_VEL_3, + MI_VEL_4, MI_VEL_5, MI_VEL_6, MI_VEL_7, diff --git a/tmk_core/protocol/lufa/lufa.c b/tmk_core/protocol/lufa/lufa.c index ba49284c9b..fb60658df7 100644 --- a/tmk_core/protocol/lufa/lufa.c +++ b/tmk_core/protocol/lufa/lufa.c @@ -1101,16 +1101,21 @@ void cc_callback(MidiDevice * device, uint8_t chan, uint8_t num, uint8_t val); void sysex_callback(MidiDevice * device, uint16_t start, uint8_t length, uint8_t * data); + +void setup_midi(void) +{ + midi_init(); + midi_device_init(&midi_device); + midi_device_set_send_func(&midi_device, usb_send_func); + midi_device_set_pre_input_process_func(&midi_device, usb_get_midi); +} #endif int main(void) __attribute__ ((weak)); int main(void) { - #ifdef MIDI_ENABLE - midi_device_init(&midi_device); - midi_device_set_send_func(&midi_device, usb_send_func); - midi_device_set_pre_input_process_func(&midi_device, usb_get_midi); + setup_midi(); #endif setup_mcu(); diff --git a/tmk_core/protocol/lufa/lufa.h b/tmk_core/protocol/lufa/lufa.h index a049fd43c9..a515737862 100644 --- a/tmk_core/protocol/lufa/lufa.h +++ b/tmk_core/protocol/lufa/lufa.h @@ -49,7 +49,7 @@ #include #include "host.h" #ifdef MIDI_ENABLE - #include "midi.h" + #include "process_midi.h" #endif #ifdef __cplusplus extern "C" { From f2b2e05f126403c8a6f0fc3d542beddac7974e9b Mon Sep 17 00:00:00 2001 From: Gabriel Young Date: Sat, 18 Feb 2017 03:13:43 -0800 Subject: [PATCH 04/91] clean up commented code --- quantum/process_keycode/process_midi.c | 137 ------------------------- 1 file changed, 137 deletions(-) diff --git a/quantum/process_keycode/process_midi.c b/quantum/process_keycode/process_midi.c index bc48b39059..acaae7c30a 100644 --- a/quantum/process_keycode/process_midi.c +++ b/quantum/process_keycode/process_midi.c @@ -19,82 +19,6 @@ midi_config_t midi_config; #define MIDI_INVALID_NOTE 0xFF -#if 0 -typedef struct { - uint64_t low; - uint64_t high; -} uint128_t; - -#if 0 -static void right_shift_uint128_t(uint128_t* val, uint8_t shift) -{ - uint64_t high_mask = ~0 >> (64 - shift); - uint64_t high_bits = (val->high & high_mask) << (64 - shift); - val->high = val->high >> shift; - val->low = (val->low >> shift) | high_bits; -} -#endif - -static uint64_t left_shift_uint64_t(uint64_t val, uint8_t shift) -{ - dprintf("left_shift_uint64_t(val, %c) ...\n", val, shift); - while (shift > 16u) { - dprintf(" left_shift_uint64_t: val=?, shift=%c\n", val, shift); - val <<= 16; - shift -= 16; - } - dprintf(" left_shift_uint64_t: val=?, shift=%c\n", val, shift); - val <<= shift; - return val; -} - -static void set_bit_uint128_t(uint128_t* val, uint8_t shift) -{ - uint64_t x = 1u; - - if (shift < 64) - { - x = left_shift_uint64_t(x, shift); - dprintf("x: %d\n", x); - dprintf("set_bit_uint128_t (%d): 0x%016X%016X\n", shift, 0, x); - val->low = val->low | left_shift_uint64_t(1u, shift); - } - else - { - x = left_shift_uint64_t(x, shift - 64); - dprintf("set_bit_uint128_t (%d): 0x%016X%016X\n", shift, x, 0); - val->high = val->high | left_shift_uint64_t(1u, shift - 64); - } -} - -static void clear_bit_uint128_t(uint128_t* val, uint8_t shift) -{ - if (shift < 64) - { - val->low = val->low & ~left_shift_uint64_t(1u, shift); - } - else - { - val->high = val->high & ~left_shift_uint64_t(1u, shift - 64); - } -} - -static bool is_bit_set_uint128_t(const uint128_t* val, uint8_t shift) -{ - if (shift < 64) - { - return !!(val->low & (1u << shift)); - } - else - { - return !!(val->high & (1u << (shift - 64))); - } -} - -uint128_t note_status = { 0, 0 }; -#endif - - #define MIDI_MAX_NOTES_ON 10 typedef struct { @@ -198,66 +122,5 @@ bool process_midi(uint16_t keycode, keyrecord_t *record) return false; }; -#if 0 - if (keycode == MI_ON && record->event.pressed) { - midi_activated = true; -#ifdef AUDIO_ENABLE - music_scale_user(); -#endif - return false; - } - - if (keycode == MI_OFF && record->event.pressed) { - midi_activated = false; - midi_send_cc(&midi_device, 0, 0x7B, 0); - return false; - } - - if (midi_activated) { - if (record->event.key.col == (MATRIX_COLS - 1) && record->event.key.row == (MATRIX_ROWS - 1)) { - if (record->event.pressed) { - midi_starting_note++; // Change key - midi_send_cc(&midi_device, 0, 0x7B, 0); - } - return false; - } - if (record->event.key.col == (MATRIX_COLS - 2) && record->event.key.row == (MATRIX_ROWS - 1)) { - if (record->event.pressed) { - midi_starting_note--; // Change key - midi_send_cc(&midi_device, 0, 0x7B, 0); - } - return false; - } - if (record->event.key.col == (MATRIX_COLS - 3) && record->event.key.row == (MATRIX_ROWS - 1) && record->event.pressed) { - midi_offset++; // Change scale - midi_send_cc(&midi_device, 0, 0x7B, 0); - return false; - } - if (record->event.key.col == (MATRIX_COLS - 4) && record->event.key.row == (MATRIX_ROWS - 1) && record->event.pressed) { - midi_offset--; // Change scale - midi_send_cc(&midi_device, 0, 0x7B, 0); - return false; - } - // basic - // uint8_t note = (midi_starting_note + SCALE[record->event.key.col + midi_offset])+12*(MATRIX_ROWS - record->event.key.row); - // advanced - // uint8_t note = (midi_starting_note + record->event.key.col + midi_offset)+12*(MATRIX_ROWS - record->event.key.row); - // guitar - uint8_t note = (midi_starting_note + record->event.key.col + midi_offset)+5*(MATRIX_ROWS - record->event.key.row); - // violin - // uint8_t note = (midi_starting_note + record->event.key.col + midi_offset)+7*(MATRIX_ROWS - record->event.key.row); - - if (record->event.pressed) { - // midi_send_noteon(&midi_device, record->event.key.row, midi_starting_note + SCALE[record->event.key.col], 127); - midi_send_noteon(&midi_device, 0, note, 127); - } else { - // midi_send_noteoff(&midi_device, record->event.key.row, midi_starting_note + SCALE[record->event.key.col], 127); - midi_send_noteoff(&midi_device, 0, note, 127); - } - - if (keycode < 0xFF) // ignores all normal keycodes, but lets RAISE, LOWER, etc through - return false; - } -#endif return true; } From a4163466cb09144a96e2ea7bc697af1af8a5e770 Mon Sep 17 00:00:00 2001 From: Gabriel Young Date: Sat, 18 Feb 2017 03:40:49 -0800 Subject: [PATCH 05/91] Alternative version with a tone array tone array: text data bss dec hex filename 0 25698 0 25698 6462 satan_newsboytko.hex 0x6480 bytes written into 0x7000 bytes memory (89.73%). note on array: text data bss dec hex filename 0 25802 0 25802 64ca satan_newsboytko.hex 0x6500 bytes written into 0x7000 bytes memory (90.18%). --- quantum/process_keycode/process_midi.c | 109 +++++++++++++++++++++++++ 1 file changed, 109 insertions(+) diff --git a/quantum/process_keycode/process_midi.c b/quantum/process_keycode/process_midi.c index acaae7c30a..4fbb288162 100644 --- a/quantum/process_keycode/process_midi.c +++ b/quantum/process_keycode/process_midi.c @@ -19,6 +19,10 @@ midi_config_t midi_config; #define MIDI_INVALID_NOTE 0xFF +#define MIDI_USE_NOTE_ON_ARRAY + +#ifdef MIDI_USE_NOTE_ON_ARRAY + #define MIDI_MAX_NOTES_ON 10 typedef struct { @@ -33,6 +37,15 @@ typedef struct { static midi_notes_on_array_t notes_on; +#else + +#define MIDI_TONE_COUNT (MIDI_TONE_MAX - MIDI_TONE_MIN + 1) +static uint8_t tone_status[MIDI_TONE_COUNT]; + +#endif + + + inline uint8_t compute_velocity(uint8_t setting) { return (setting + 1) * (128 / (MIDI_VELOCITY_MAX - MIDI_VELOCITY_MIN + 1)); @@ -43,7 +56,14 @@ void midi_init(void) midi_config.octave = MI_OCT_0 - MIDI_OCTAVE_MIN; midi_config.velocity = (MIDI_VELOCITY_MAX - MIDI_VELOCITY_MIN); midi_config.channel = 0; + #ifdef MIDI_USE_NOTE_ON_ARRAY notes_on.length = 0; + #else + for (uint8_t i = 0; i < MIDI_TONE_COUNT; i++) + { + tone_status[i] = MIDI_INVALID_NOTE; + } + #endif } bool process_midi(uint16_t keycode, keyrecord_t *record) @@ -54,15 +74,31 @@ bool process_midi(uint16_t keycode, keyrecord_t *record) uint8_t channel = midi_config.channel; uint8_t tone = keycode - MIDI_TONE_MIN; uint8_t velocity = compute_velocity(midi_config.velocity); + #ifdef MIDI_USE_NOTE_ON_ARRAY if (record->event.pressed && notes_on.length < MIDI_MAX_NOTES_ON) { + #else + if (record->event.pressed) { + #endif uint8_t note = 12 * midi_config.octave + tone; midi_send_noteon(&midi_device, channel, note, velocity); dprintf("midi noteon channel:%d note:%d velocity:%d\n", channel, note, velocity); + + #ifdef MIDI_USE_NOTE_ON_ARRAY + notes_on.values[notes_on.length].note = note; notes_on.values[notes_on.length].tone = tone; notes_on.length++; + + #else + + tone_status[tone] = note; + + #endif } else { + + #ifdef MIDI_USE_NOTE_ON_ARRAY + for (uint8_t i = 0; i < notes_on.length; i++) { uint8_t note = notes_on.values[i].note; if (tone == notes_on.values[i].tone) { @@ -78,6 +114,18 @@ bool process_midi(uint16_t keycode, keyrecord_t *record) break; } } + + #else + + uint8_t note = tone_status[tone]; + if (note != MIDI_INVALID_NOTE) + { + midi_send_noteoff(&midi_device, channel, note, velocity); + dprintf("midi noteoff channel:%d note:%d velocity:%d\n", channel, note, velocity); + } + tone_status[tone] = MIDI_INVALID_NOTE; + + #endif } return false; } @@ -122,5 +170,66 @@ bool process_midi(uint16_t keycode, keyrecord_t *record) return false; }; +#if 0 + if (keycode == MI_ON && record->event.pressed) { + midi_activated = true; +#ifdef AUDIO_ENABLE + music_scale_user(); +#endif + return false; + } + + if (keycode == MI_OFF && record->event.pressed) { + midi_activated = false; + midi_send_cc(&midi_device, 0, 0x7B, 0); + return false; + } + + if (midi_activated) { + if (record->event.key.col == (MATRIX_COLS - 1) && record->event.key.row == (MATRIX_ROWS - 1)) { + if (record->event.pressed) { + midi_starting_note++; // Change key + midi_send_cc(&midi_device, 0, 0x7B, 0); + } + return false; + } + if (record->event.key.col == (MATRIX_COLS - 2) && record->event.key.row == (MATRIX_ROWS - 1)) { + if (record->event.pressed) { + midi_starting_note--; // Change key + midi_send_cc(&midi_device, 0, 0x7B, 0); + } + return false; + } + if (record->event.key.col == (MATRIX_COLS - 3) && record->event.key.row == (MATRIX_ROWS - 1) && record->event.pressed) { + midi_offset++; // Change scale + midi_send_cc(&midi_device, 0, 0x7B, 0); + return false; + } + if (record->event.key.col == (MATRIX_COLS - 4) && record->event.key.row == (MATRIX_ROWS - 1) && record->event.pressed) { + midi_offset--; // Change scale + midi_send_cc(&midi_device, 0, 0x7B, 0); + return false; + } + // basic + // uint8_t note = (midi_starting_note + SCALE[record->event.key.col + midi_offset])+12*(MATRIX_ROWS - record->event.key.row); + // advanced + // uint8_t note = (midi_starting_note + record->event.key.col + midi_offset)+12*(MATRIX_ROWS - record->event.key.row); + // guitar + uint8_t note = (midi_starting_note + record->event.key.col + midi_offset)+5*(MATRIX_ROWS - record->event.key.row); + // violin + // uint8_t note = (midi_starting_note + record->event.key.col + midi_offset)+7*(MATRIX_ROWS - record->event.key.row); + + if (record->event.pressed) { + // midi_send_noteon(&midi_device, record->event.key.row, midi_starting_note + SCALE[record->event.key.col], 127); + midi_send_noteon(&midi_device, 0, note, 127); + } else { + // midi_send_noteoff(&midi_device, record->event.key.row, midi_starting_note + SCALE[record->event.key.col], 127); + midi_send_noteoff(&midi_device, 0, note, 127); + } + + if (keycode < 0xFF) // ignores all normal keycodes, but lets RAISE, LOWER, etc through + return false; + } +#endif return true; } From f67aefc522dd8b72711e7fc5280e1cae1470d1c5 Mon Sep 17 00:00:00 2001 From: Gabriel Young Date: Sat, 18 Feb 2017 03:43:30 -0800 Subject: [PATCH 06/91] remove disabled code --- quantum/process_keycode/process_midi.c | 129 ------------------------- 1 file changed, 129 deletions(-) diff --git a/quantum/process_keycode/process_midi.c b/quantum/process_keycode/process_midi.c index 4fbb288162..2ce7418ea7 100644 --- a/quantum/process_keycode/process_midi.c +++ b/quantum/process_keycode/process_midi.c @@ -1,11 +1,5 @@ #include "process_midi.h" -#if 0 -bool midi_activated = false; -uint8_t midi_starting_note = 0x0C; -int midi_offset = 7; -#endif - typedef union { uint16_t raw; struct { @@ -19,33 +13,9 @@ midi_config_t midi_config; #define MIDI_INVALID_NOTE 0xFF -#define MIDI_USE_NOTE_ON_ARRAY - -#ifdef MIDI_USE_NOTE_ON_ARRAY - -#define MIDI_MAX_NOTES_ON 10 - -typedef struct { - uint8_t note; - uint8_t tone; -} midi_notes_on_array_entry_t; - -typedef struct { - uint8_t length; - midi_notes_on_array_entry_t values[MIDI_MAX_NOTES_ON]; -} midi_notes_on_array_t; - -static midi_notes_on_array_t notes_on; - -#else - #define MIDI_TONE_COUNT (MIDI_TONE_MAX - MIDI_TONE_MIN + 1) static uint8_t tone_status[MIDI_TONE_COUNT]; -#endif - - - inline uint8_t compute_velocity(uint8_t setting) { return (setting + 1) * (128 / (MIDI_VELOCITY_MAX - MIDI_VELOCITY_MIN + 1)); @@ -74,49 +44,13 @@ bool process_midi(uint16_t keycode, keyrecord_t *record) uint8_t channel = midi_config.channel; uint8_t tone = keycode - MIDI_TONE_MIN; uint8_t velocity = compute_velocity(midi_config.velocity); - #ifdef MIDI_USE_NOTE_ON_ARRAY - if (record->event.pressed && notes_on.length < MIDI_MAX_NOTES_ON) { - #else if (record->event.pressed) { - #endif uint8_t note = 12 * midi_config.octave + tone; midi_send_noteon(&midi_device, channel, note, velocity); dprintf("midi noteon channel:%d note:%d velocity:%d\n", channel, note, velocity); - - #ifdef MIDI_USE_NOTE_ON_ARRAY - - notes_on.values[notes_on.length].note = note; - notes_on.values[notes_on.length].tone = tone; - notes_on.length++; - - #else - tone_status[tone] = note; - - #endif } else { - - #ifdef MIDI_USE_NOTE_ON_ARRAY - - for (uint8_t i = 0; i < notes_on.length; i++) { - uint8_t note = notes_on.values[i].note; - if (tone == notes_on.values[i].tone) { - midi_send_noteoff(&midi_device, channel, note, velocity); - dprintf("midi noteoff channel:%d note:%d velocity:%d\n", channel, note, velocity); - - for (uint8_t j=i; j < notes_on.length - 1; j++) - { - notes_on.values[j] = notes_on.values[j + 1]; - } - - notes_on.length--; - break; - } - } - - #else - uint8_t note = tone_status[tone]; if (note != MIDI_INVALID_NOTE) { @@ -124,8 +58,6 @@ bool process_midi(uint16_t keycode, keyrecord_t *record) dprintf("midi noteoff channel:%d note:%d velocity:%d\n", channel, note, velocity); } tone_status[tone] = MIDI_INVALID_NOTE; - - #endif } return false; } @@ -170,66 +102,5 @@ bool process_midi(uint16_t keycode, keyrecord_t *record) return false; }; -#if 0 - if (keycode == MI_ON && record->event.pressed) { - midi_activated = true; -#ifdef AUDIO_ENABLE - music_scale_user(); -#endif - return false; - } - - if (keycode == MI_OFF && record->event.pressed) { - midi_activated = false; - midi_send_cc(&midi_device, 0, 0x7B, 0); - return false; - } - - if (midi_activated) { - if (record->event.key.col == (MATRIX_COLS - 1) && record->event.key.row == (MATRIX_ROWS - 1)) { - if (record->event.pressed) { - midi_starting_note++; // Change key - midi_send_cc(&midi_device, 0, 0x7B, 0); - } - return false; - } - if (record->event.key.col == (MATRIX_COLS - 2) && record->event.key.row == (MATRIX_ROWS - 1)) { - if (record->event.pressed) { - midi_starting_note--; // Change key - midi_send_cc(&midi_device, 0, 0x7B, 0); - } - return false; - } - if (record->event.key.col == (MATRIX_COLS - 3) && record->event.key.row == (MATRIX_ROWS - 1) && record->event.pressed) { - midi_offset++; // Change scale - midi_send_cc(&midi_device, 0, 0x7B, 0); - return false; - } - if (record->event.key.col == (MATRIX_COLS - 4) && record->event.key.row == (MATRIX_ROWS - 1) && record->event.pressed) { - midi_offset--; // Change scale - midi_send_cc(&midi_device, 0, 0x7B, 0); - return false; - } - // basic - // uint8_t note = (midi_starting_note + SCALE[record->event.key.col + midi_offset])+12*(MATRIX_ROWS - record->event.key.row); - // advanced - // uint8_t note = (midi_starting_note + record->event.key.col + midi_offset)+12*(MATRIX_ROWS - record->event.key.row); - // guitar - uint8_t note = (midi_starting_note + record->event.key.col + midi_offset)+5*(MATRIX_ROWS - record->event.key.row); - // violin - // uint8_t note = (midi_starting_note + record->event.key.col + midi_offset)+7*(MATRIX_ROWS - record->event.key.row); - - if (record->event.pressed) { - // midi_send_noteon(&midi_device, record->event.key.row, midi_starting_note + SCALE[record->event.key.col], 127); - midi_send_noteon(&midi_device, 0, note, 127); - } else { - // midi_send_noteoff(&midi_device, record->event.key.row, midi_starting_note + SCALE[record->event.key.col], 127); - midi_send_noteoff(&midi_device, 0, note, 127); - } - - if (keycode < 0xFF) // ignores all normal keycodes, but lets RAISE, LOWER, etc through - return false; - } -#endif return true; } From 7c5e510fe2e57d1b3c0f98612f1f89d413c07525 Mon Sep 17 00:00:00 2001 From: Gabriel Young Date: Sat, 18 Feb 2017 04:25:17 -0800 Subject: [PATCH 07/91] add support for pedal cc messages --- quantum/process_keycode/process_midi.c | 61 +++++++++++++++++++++----- quantum/quantum_keycodes.h | 11 ++--- 2 files changed, 57 insertions(+), 15 deletions(-) diff --git a/quantum/process_keycode/process_midi.c b/quantum/process_keycode/process_midi.c index 2ce7418ea7..f7a8b6650f 100644 --- a/quantum/process_keycode/process_midi.c +++ b/quantum/process_keycode/process_midi.c @@ -62,43 +62,84 @@ bool process_midi(uint16_t keycode, keyrecord_t *record) return false; } case MIDI_OCTAVE_MIN ... MIDI_OCTAVE_MAX: - if (record->event.pressed) + if (record->event.pressed) { midi_config.octave = keycode - MIDI_OCTAVE_MIN; + dprintf("midi octave %d\n", midi_config.octave); + } return false; case MI_OCTD: - if (record->event.pressed && midi_config.octave > 0) + if (record->event.pressed && midi_config.octave > 0) { midi_config.octave--; + dprintf("midi octave %d\n", midi_config.octave); + } return false; case MI_OCTU: - if (record->event.pressed && midi_config.octave < (MIDI_OCTAVE_MAX - MIDI_OCTAVE_MIN)) + if (record->event.pressed && midi_config.octave < (MIDI_OCTAVE_MAX - MIDI_OCTAVE_MIN)) { midi_config.octave++; + dprintf("midi octave %d\n", midi_config.octave); + } return false; case MIDI_VELOCITY_MIN ... MIDI_VELOCITY_MAX: - if (record->event.pressed) + if (record->event.pressed) { midi_config.velocity = keycode - MIDI_VELOCITY_MIN; + dprintf("midi velocity %d\n", midi_config.velocity); + } return false; case MI_VELD: - if (record->event.pressed && midi_config.velocity > 0) + if (record->event.pressed && midi_config.velocity > 0) { midi_config.velocity--; + dprintf("midi velocity %d\n", midi_config.velocity); + } return false; case MI_VELU: - if (record->event.pressed) + if (record->event.pressed) { midi_config.velocity++; + dprintf("midi velocity %d\n", midi_config.velocity); + } return false; case MIDI_CHANNEL_MIN ... MIDI_CHANNEL_MAX: - if (record->event.pressed) + if (record->event.pressed) { midi_config.channel = keycode - MIDI_CHANNEL_MIN; + dprintf("midi channel %d\n", midi_config.channel); + } return false; case MI_CHD: - if (record->event.pressed) + if (record->event.pressed) { midi_config.channel--; + dprintf("midi channel %d\n", midi_config.channel); + } return false; case MI_CHU: - if (record->event.pressed) + if (record->event.pressed) { midi_config.channel++; + dprintf("midi channel %d\n", midi_config.channel); + } + return false; + case MI_OFF: + if (record->event.pressed) { + midi_send_cc(&midi_device, midi_config.channel, 0x7B, 0); + dprintf("midi off\n"); + } return false; case MI_SUS: - //TODO + midi_send_cc(&midi_device, midi_config.channel, 0x40, record->event.pressed ? 127 : 0); + dprintf("midi sustain %d\n", record->event.pressed); + return false; + case MI_PORT: + midi_send_cc(&midi_device, midi_config.channel, 0x41, record->event.pressed ? 127 : 0); + dprintf("midi portamento %d\n", record->event.pressed); + return false; + case MI_SOST: + midi_send_cc(&midi_device, midi_config.channel, 0x42, record->event.pressed ? 127 : 0); + dprintf("midi sostenuto %d\n", record->event.pressed); + return false; + case MI_SOFT: + midi_send_cc(&midi_device, midi_config.channel, 0x43, record->event.pressed ? 127 : 0); + dprintf("midi soft %d\n", record->event.pressed); + return false; + case MI_LEG: + midi_send_cc(&midi_device, midi_config.channel, 0x43, record->event.pressed ? 127 : 0); + dprintf("midi legato %d\n", record->event.pressed); return false; }; diff --git a/quantum/quantum_keycodes.h b/quantum/quantum_keycodes.h index a024a96395..f2b9509b56 100644 --- a/quantum/quantum_keycodes.h +++ b/quantum/quantum_keycodes.h @@ -109,8 +109,6 @@ enum quantum_keycodes { #ifdef MIDI_ENABLE // Midi - MIDI_ON, - MIDI_OFF, MIDI_TONE_MIN, @@ -221,7 +219,13 @@ enum quantum_keycodes { MI_CHD, // previous channel MI_CHU, // next channel + MI_OFF, // all notes off + MI_SUS, // sustain + MI_PORT, // portamento + MI_SOST, // sostenuto + MI_SOFT, // soft + MI_LEG, // legato #endif // Backlight functionality @@ -394,9 +398,6 @@ enum quantum_keycodes { #define BL_ON BL_9 #define BL_OFF BL_0 -#define MI_ON MIDI_ON -#define MI_OFF MIDI_OFF - // GOTO layer - 16 layers max // when: // ON_PRESS = 1 From dd8f8e6baeb1549735403edf2a2f04f07edb4bf2 Mon Sep 17 00:00:00 2001 From: Gabriel Young Date: Sat, 18 Feb 2017 05:32:55 -0800 Subject: [PATCH 08/91] implement modulation --- quantum/process_keycode/process_midi.c | 58 ++++++- quantum/process_keycode/process_midi.h | 201 +------------------------ quantum/quantum_keycodes.h | 6 +- tmk_core/protocol/lufa/lufa.c | 2 +- 4 files changed, 61 insertions(+), 206 deletions(-) diff --git a/quantum/process_keycode/process_midi.c b/quantum/process_keycode/process_midi.c index f7a8b6650f..d09aa0b382 100644 --- a/quantum/process_keycode/process_midi.c +++ b/quantum/process_keycode/process_midi.c @@ -1,4 +1,5 @@ #include "process_midi.h" +#include "timer.h" typedef union { uint16_t raw; @@ -6,6 +7,7 @@ typedef union { uint8_t octave :4; uint8_t velocity :4; uint8_t channel :4; + uint8_t modulation_interval :4; }; } midi_config_t; @@ -16,6 +18,10 @@ midi_config_t midi_config; #define MIDI_TONE_COUNT (MIDI_TONE_MAX - MIDI_TONE_MIN + 1) static uint8_t tone_status[MIDI_TONE_COUNT]; +static uint8_t midi_modulation; +static int8_t midi_modulation_step; +static uint16_t midi_modulation_timer; + inline uint8_t compute_velocity(uint8_t setting) { return (setting + 1) * (128 / (MIDI_VELOCITY_MAX - MIDI_VELOCITY_MIN + 1)); @@ -26,14 +32,40 @@ void midi_init(void) midi_config.octave = MI_OCT_0 - MIDI_OCTAVE_MIN; midi_config.velocity = (MIDI_VELOCITY_MAX - MIDI_VELOCITY_MIN); midi_config.channel = 0; - #ifdef MIDI_USE_NOTE_ON_ARRAY - notes_on.length = 0; - #else + midi_config.modulation_interval = 8; + for (uint8_t i = 0; i < MIDI_TONE_COUNT; i++) { tone_status[i] = MIDI_INVALID_NOTE; } - #endif + + midi_modulation = 0; + midi_modulation_step = 0; + midi_modulation_timer = 0; +} + +void midi_task(void) +{ + if (timer_elapsed(midi_modulation_timer) < midi_config.modulation_interval) + return; + midi_modulation_timer = timer_read(); + + if (midi_modulation_step != 0) + { + dprintf("midi modulation %d\n", midi_modulation); + midi_send_cc(&midi_device, midi_config.channel, 0x1, midi_modulation); + + if (midi_modulation_step < 0 && midi_modulation < -midi_modulation_step) { + midi_modulation = 0; + midi_modulation_step = 0; + return; + } + + midi_modulation += midi_modulation_step; + + if (midi_modulation > 127) + midi_modulation = 127; + } } bool process_midi(uint16_t keycode, keyrecord_t *record) @@ -141,6 +173,24 @@ bool process_midi(uint16_t keycode, keyrecord_t *record) midi_send_cc(&midi_device, midi_config.channel, 0x43, record->event.pressed ? 127 : 0); dprintf("midi legato %d\n", record->event.pressed); return false; + case MI_MOD: + midi_modulation_step = record->event.pressed ? 1 : -1; + return false; + case MI_MODSD: + if (record->event.pressed) { + midi_config.modulation_interval++; + // prevent overflow + if (midi_config.modulation_interval == 0) + midi_config.modulation_interval--; + dprintf("midi modulation interval %d\n", midi_config.modulation_interval); + } + return false; + case MI_MODSU: + if (record->event.pressed && midi_config.modulation_interval > 0) { + midi_config.modulation_interval--; + dprintf("midi modulation interval %d\n", midi_config.modulation_interval); + } + return false; }; return true; diff --git a/quantum/process_keycode/process_midi.h b/quantum/process_keycode/process_midi.h index b0e0aeb832..66ce60b0e5 100644 --- a/quantum/process_keycode/process_midi.h +++ b/quantum/process_keycode/process_midi.h @@ -5,206 +5,7 @@ #include "midi.h" void midi_init(void); - +void midi_task(void); bool process_midi(uint16_t keycode, keyrecord_t *record); -#define MIDI(n) ((n) | 0x6000) -#define MIDI12 0x6000, 0x6000, 0x6000, 0x6000, 0x6000, 0x6000, 0x6000, 0x6000, 0x6000, 0x6000, 0x6000, 0x6000 - -#define CHNL(note, channel) (note + (channel << 8)) - -#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 ) -#define N_DN1F (0x600C + (12 * -1) + 1 ) -#define N_DN1 (0x600C + (12 * -1) + 2 ) -#define N_DN1S (0x600C + (12 * -1) + 3 ) -#define N_EN1F (0x600C + (12 * -1) + 3 ) -#define N_EN1 (0x600C + (12 * -1) + 4 ) -#define N_FN1 (0x600C + (12 * -1) + 5 ) -#define N_FN1S (0x600C + (12 * -1) + 6 ) -#define N_GN1F (0x600C + (12 * -1) + 6 ) -#define N_GN1 (0x600C + (12 * -1) + 7 ) -#define N_GN1S (0x600C + (12 * -1) + 8 ) -#define N_AN1F (0x600C + (12 * -1) + 8 ) -#define N_AN1 (0x600C + (12 * -1) + 9 ) -#define N_AN1S (0x600C + (12 * -1) + 10) -#define N_BN1F (0x600C + (12 * -1) + 10) -#define N_BN1 (0x600C + (12 * -1) + 11) -#define N_C0 (0x600C + (12 * 0) + 0 ) -#define N_C0S (0x600C + (12 * 0) + 1 ) -#define N_D0F (0x600C + (12 * 0) + 1 ) -#define N_D0 (0x600C + (12 * 0) + 2 ) -#define N_D0S (0x600C + (12 * 0) + 3 ) -#define N_E0F (0x600C + (12 * 0) + 3 ) -#define N_E0 (0x600C + (12 * 0) + 4 ) -#define N_F0 (0x600C + (12 * 0) + 5 ) -#define N_F0S (0x600C + (12 * 0) + 6 ) -#define N_G0F (0x600C + (12 * 0) + 6 ) -#define N_G0 (0x600C + (12 * 0) + 7 ) -#define N_G0S (0x600C + (12 * 0) + 8 ) -#define N_A0F (0x600C + (12 * 0) + 8 ) -#define N_A0 (0x600C + (12 * 0) + 9 ) -#define N_A0S (0x600C + (12 * 0) + 10) -#define N_B0F (0x600C + (12 * 0) + 10) -#define N_B0 (0x600C + (12 * 0) + 11) -#define N_C1 (0x600C + (12 * 1) + 0 ) -#define N_C1S (0x600C + (12 * 1) + 1 ) -#define N_D1F (0x600C + (12 * 1) + 1 ) -#define N_D1 (0x600C + (12 * 1) + 2 ) -#define N_D1S (0x600C + (12 * 1) + 3 ) -#define N_E1F (0x600C + (12 * 1) + 3 ) -#define N_E1 (0x600C + (12 * 1) + 4 ) -#define N_F1 (0x600C + (12 * 1) + 5 ) -#define N_F1S (0x600C + (12 * 1) + 6 ) -#define N_G1F (0x600C + (12 * 1) + 6 ) -#define N_G1 (0x600C + (12 * 1) + 7 ) -#define N_G1S (0x600C + (12 * 1) + 8 ) -#define N_A1F (0x600C + (12 * 1) + 8 ) -#define N_A1 (0x600C + (12 * 1) + 9 ) -#define N_A1S (0x600C + (12 * 1) + 10) -#define N_B1F (0x600C + (12 * 1) + 10) -#define N_B1 (0x600C + (12 * 1) + 11) -#define N_C2 (0x600C + (12 * 2) + 0 ) -#define N_C2S (0x600C + (12 * 2) + 1 ) -#define N_D2F (0x600C + (12 * 2) + 1 ) -#define N_D2 (0x600C + (12 * 2) + 2 ) -#define N_D2S (0x600C + (12 * 2) + 3 ) -#define N_E2F (0x600C + (12 * 2) + 3 ) -#define N_E2 (0x600C + (12 * 2) + 4 ) -#define N_F2 (0x600C + (12 * 2) + 5 ) -#define N_F2S (0x600C + (12 * 2) + 6 ) -#define N_G2F (0x600C + (12 * 2) + 6 ) -#define N_G2 (0x600C + (12 * 2) + 7 ) -#define N_G2S (0x600C + (12 * 2) + 8 ) -#define N_A2F (0x600C + (12 * 2) + 8 ) -#define N_A2 (0x600C + (12 * 2) + 9 ) -#define N_A2S (0x600C + (12 * 2) + 10) -#define N_B2F (0x600C + (12 * 2) + 10) -#define N_B2 (0x600C + (12 * 2) + 11) -#define N_C3 (0x600C + (12 * 3) + 0 ) -#define N_C3S (0x600C + (12 * 3) + 1 ) -#define N_D3F (0x600C + (12 * 3) + 1 ) -#define N_D3 (0x600C + (12 * 3) + 2 ) -#define N_D3S (0x600C + (12 * 3) + 3 ) -#define N_E3F (0x600C + (12 * 3) + 3 ) -#define N_E3 (0x600C + (12 * 3) + 4 ) -#define N_F3 (0x600C + (12 * 3) + 5 ) -#define N_F3S (0x600C + (12 * 3) + 6 ) -#define N_G3F (0x600C + (12 * 3) + 6 ) -#define N_G3 (0x600C + (12 * 3) + 7 ) -#define N_G3S (0x600C + (12 * 3) + 8 ) -#define N_A3F (0x600C + (12 * 3) + 8 ) -#define N_A3 (0x600C + (12 * 3) + 9 ) -#define N_A3S (0x600C + (12 * 3) + 10) -#define N_B3F (0x600C + (12 * 3) + 10) -#define N_B3 (0x600C + (12 * 3) + 11) -#define N_C4 (0x600C + (12 * 4) + 0 ) -#define N_C4S (0x600C + (12 * 4) + 1 ) -#define N_D4F (0x600C + (12 * 4) + 1 ) -#define N_D4 (0x600C + (12 * 4) + 2 ) -#define N_D4S (0x600C + (12 * 4) + 3 ) -#define N_E4F (0x600C + (12 * 4) + 3 ) -#define N_E4 (0x600C + (12 * 4) + 4 ) -#define N_F4 (0x600C + (12 * 4) + 5 ) -#define N_F4S (0x600C + (12 * 4) + 6 ) -#define N_G4F (0x600C + (12 * 4) + 6 ) -#define N_G4 (0x600C + (12 * 4) + 7 ) -#define N_G4S (0x600C + (12 * 4) + 8 ) -#define N_A4F (0x600C + (12 * 4) + 8 ) -#define N_A4 (0x600C + (12 * 4) + 9 ) -#define N_A4S (0x600C + (12 * 4) + 10) -#define N_B4F (0x600C + (12 * 4) + 10) -#define N_B4 (0x600C + (12 * 4) + 11) -#define N_C5 (0x600C + (12 * 5) + 0 ) -#define N_C5S (0x600C + (12 * 5) + 1 ) -#define N_D5F (0x600C + (12 * 5) + 1 ) -#define N_D5 (0x600C + (12 * 5) + 2 ) -#define N_D5S (0x600C + (12 * 5) + 3 ) -#define N_E5F (0x600C + (12 * 5) + 3 ) -#define N_E5 (0x600C + (12 * 5) + 4 ) -#define N_F5 (0x600C + (12 * 5) + 5 ) -#define N_F5S (0x600C + (12 * 5) + 6 ) -#define N_G5F (0x600C + (12 * 5) + 6 ) -#define N_G5 (0x600C + (12 * 5) + 7 ) -#define N_G5S (0x600C + (12 * 5) + 8 ) -#define N_A5F (0x600C + (12 * 5) + 8 ) -#define N_A5 (0x600C + (12 * 5) + 9 ) -#define N_A5S (0x600C + (12 * 5) + 10) -#define N_B5F (0x600C + (12 * 5) + 10) -#define N_B5 (0x600C + (12 * 5) + 11) -#define N_C6 (0x600C + (12 * 6) + 0 ) -#define N_C6S (0x600C + (12 * 6) + 1 ) -#define N_D6F (0x600C + (12 * 6) + 1 ) -#define N_D6 (0x600C + (12 * 6) + 2 ) -#define N_D6S (0x600C + (12 * 6) + 3 ) -#define N_E6F (0x600C + (12 * 6) + 3 ) -#define N_E6 (0x600C + (12 * 6) + 4 ) -#define N_F6 (0x600C + (12 * 6) + 5 ) -#define N_F6S (0x600C + (12 * 6) + 6 ) -#define N_G6F (0x600C + (12 * 6) + 6 ) -#define N_G6 (0x600C + (12 * 6) + 7 ) -#define N_G6S (0x600C + (12 * 6) + 8 ) -#define N_A6F (0x600C + (12 * 6) + 8 ) -#define N_A6 (0x600C + (12 * 6) + 9 ) -#define N_A6S (0x600C + (12 * 6) + 10) -#define N_B6F (0x600C + (12 * 6) + 10) -#define N_B6 (0x600C + (12 * 6) + 11) -#define N_C7 (0x600C + (12 * 7) + 0 ) -#define N_C7S (0x600C + (12 * 7) + 1 ) -#define N_D7F (0x600C + (12 * 7) + 1 ) -#define N_D7 (0x600C + (12 * 7) + 2 ) -#define N_D7S (0x600C + (12 * 7) + 3 ) -#define N_E7F (0x600C + (12 * 7) + 3 ) -#define N_E7 (0x600C + (12 * 7) + 4 ) -#define N_F7 (0x600C + (12 * 7) + 5 ) -#define N_F7S (0x600C + (12 * 7) + 6 ) -#define N_G7F (0x600C + (12 * 7) + 6 ) -#define N_G7 (0x600C + (12 * 7) + 7 ) -#define N_G7S (0x600C + (12 * 7) + 8 ) -#define N_A7F (0x600C + (12 * 7) + 8 ) -#define N_A7 (0x600C + (12 * 7) + 9 ) -#define N_A7S (0x600C + (12 * 7) + 10) -#define N_B7F (0x600C + (12 * 7) + 10) -#define N_B7 (0x600C + (12 * 7) + 11) -#define N_C8 (0x600C + (12 * 8) + 0 ) -#define N_C8S (0x600C + (12 * 8) + 1 ) -#define N_D8F (0x600C + (12 * 8) + 1 ) -#define N_D8 (0x600C + (12 * 8) + 2 ) -#define N_D8S (0x600C + (12 * 8) + 3 ) -#define N_E8F (0x600C + (12 * 8) + 3 ) -#define N_E8 (0x600C + (12 * 8) + 4 ) -#define N_F8 (0x600C + (12 * 8) + 5 ) -#define N_F8S (0x600C + (12 * 8) + 6 ) -#define N_G8F (0x600C + (12 * 8) + 6 ) -#define N_G8 (0x600C + (12 * 8) + 7 ) -#define N_G8S (0x600C + (12 * 8) + 8 ) -#define N_A8F (0x600C + (12 * 8) + 8 ) -#define N_A8 (0x600C + (12 * 8) + 9 ) -#define N_A8S (0x600C + (12 * 8) + 10) -#define N_B8F (0x600C + (12 * 8) + 10) -#define N_B8 (0x600C + (12 * 8) + 11) -#define N_C8 (0x600C + (12 * 8) + 0 ) -#define N_C8S (0x600C + (12 * 8) + 1 ) -#define N_D8F (0x600C + (12 * 8) + 1 ) -#define N_D8 (0x600C + (12 * 8) + 2 ) -#define N_D8S (0x600C + (12 * 8) + 3 ) -#define N_E8F (0x600C + (12 * 8) + 3 ) -#define N_E8 (0x600C + (12 * 8) + 4 ) -#define N_F8 (0x600C + (12 * 8) + 5 ) -#define N_F8S (0x600C + (12 * 8) + 6 ) -#define N_G8F (0x600C + (12 * 8) + 6 ) -#define N_G8 (0x600C + (12 * 8) + 7 ) -#define N_G8S (0x600C + (12 * 8) + 8 ) -#define N_A8F (0x600C + (12 * 8) + 8 ) -#define N_A8 (0x600C + (12 * 8) + 9 ) -#define N_A8S (0x600C + (12 * 8) + 10) -#define N_B8F (0x600C + (12 * 8) + 10) -#define N_B8 (0x600C + (12 * 8) + 11) - #endif \ No newline at end of file diff --git a/quantum/quantum_keycodes.h b/quantum/quantum_keycodes.h index f2b9509b56..4423d25eff 100644 --- a/quantum/quantum_keycodes.h +++ b/quantum/quantum_keycodes.h @@ -224,8 +224,12 @@ enum quantum_keycodes { MI_SUS, // sustain MI_PORT, // portamento MI_SOST, // sostenuto - MI_SOFT, // soft + MI_SOFT, // soft pedal MI_LEG, // legato + + MI_MOD, // modulation + MI_MODSD, // decrease modulation speed + MI_MODSU, // increase modulation speed #endif // Backlight functionality diff --git a/tmk_core/protocol/lufa/lufa.c b/tmk_core/protocol/lufa/lufa.c index fb60658df7..bd24980573 100644 --- a/tmk_core/protocol/lufa/lufa.c +++ b/tmk_core/protocol/lufa/lufa.c @@ -1180,7 +1180,7 @@ int main(void) #ifdef MIDI_ENABLE midi_device_process(&midi_device); - // MIDI_Task(); + midi_task(); #endif #if defined(RGBLIGHT_ANIMATIONS) & defined(RGBLIGHT_ENABLE) From 5e6097f0154403dccb9b5658390c84441aa509bc Mon Sep 17 00:00:00 2001 From: Gabriel Young Date: Sat, 18 Feb 2017 06:19:48 -0800 Subject: [PATCH 09/91] add keycodes for transpose range --- quantum/process_keycode/process_midi.c | 37 +++++++++++++++++++++----- quantum/quantum_keycodes.h | 18 +++++++++++++ 2 files changed, 48 insertions(+), 7 deletions(-) diff --git a/quantum/process_keycode/process_midi.c b/quantum/process_keycode/process_midi.c index d09aa0b382..4d60aefb1c 100644 --- a/quantum/process_keycode/process_midi.c +++ b/quantum/process_keycode/process_midi.c @@ -2,12 +2,13 @@ #include "timer.h" typedef union { - uint16_t raw; + uint32_t raw; struct { - uint8_t octave :4; - uint8_t velocity :4; - uint8_t channel :4; - uint8_t modulation_interval :4; + uint8_t octave :4; + int8_t transpose :4; + uint8_t velocity :4; + uint8_t channel :4; + uint8_t modulation_interval :4; }; } midi_config_t; @@ -29,7 +30,8 @@ inline uint8_t compute_velocity(uint8_t setting) void midi_init(void) { - midi_config.octave = MI_OCT_0 - MIDI_OCTAVE_MIN; + midi_config.octave = MI_OCT_2 - MIDI_OCTAVE_MIN; + midi_config.transpose = 0; midi_config.velocity = (MIDI_VELOCITY_MAX - MIDI_VELOCITY_MIN); midi_config.channel = 0; midi_config.modulation_interval = 8; @@ -77,7 +79,7 @@ bool process_midi(uint16_t keycode, keyrecord_t *record) uint8_t tone = keycode - MIDI_TONE_MIN; uint8_t velocity = compute_velocity(midi_config.velocity); if (record->event.pressed) { - uint8_t note = 12 * midi_config.octave + tone; + uint8_t note = 12 * midi_config.octave + tone + midi_config.transpose; midi_send_noteon(&midi_device, channel, note, velocity); dprintf("midi noteon channel:%d note:%d velocity:%d\n", channel, note, velocity); tone_status[tone] = note; @@ -111,6 +113,27 @@ bool process_midi(uint16_t keycode, keyrecord_t *record) dprintf("midi octave %d\n", midi_config.octave); } return false; + case MIDI_TRANSPOSE_MIN ... MIDI_TRANSPOSE_MAX: + if (record->event.pressed) { + midi_config.transpose = keycode - MI_TRNS_0; + dprintf("midi transpose %d\n", midi_config.transpose); + } + return false; + case MI_TRNSD: + if (record->event.pressed && midi_config.transpose > (MIDI_TRANSPOSE_MIN - MI_TRNS_0)) { + midi_config.transpose--; + dprintf("midi transpose %d\n", midi_config.transpose); + } + return false; + case MI_TRNSU: + if (record->event.pressed && midi_config.transpose < (MIDI_TRANSPOSE_MAX - MI_TRNS_0)) { + const bool positive = midi_config.transpose > 0; + midi_config.transpose++; + if (positive && midi_config.transpose < 0) + midi_config.transpose--; + dprintf("midi transpose %d\n", midi_config.transpose); + } + return false; case MIDI_VELOCITY_MIN ... MIDI_VELOCITY_MAX: if (record->event.pressed) { midi_config.velocity = keycode - MIDI_VELOCITY_MIN; diff --git a/quantum/quantum_keycodes.h b/quantum/quantum_keycodes.h index 4423d25eff..30cc9abdb4 100644 --- a/quantum/quantum_keycodes.h +++ b/quantum/quantum_keycodes.h @@ -183,6 +183,24 @@ enum quantum_keycodes { MI_OCTD, // octave down MI_OCTU, // octave up + MIDI_TRANSPOSE_MIN, + MI_TRNS_N6 = MIDI_TRANSPOSE_MIN, + MI_TRNS_N5, + MI_TRNS_N4, + MI_TRNS_N3, + MI_TRNS_N2, + MI_TRNS_N1, + MI_TRNS_0, + MI_TRNS_1, + MI_TRNS_2, + MI_TRNS_3, + MI_TRNS_4, + MI_TRNS_5, + MI_TRNS_6, + MIDI_TRANSPOSE_MAX = MI_TRNS_6, + MI_TRNSD, // transpose down + MI_TRNSU, // transpose up + MIDI_VELOCITY_MIN, MI_VEL_1 = MIDI_VELOCITY_MIN, MI_VEL_2, From ae0752dff552a07fb52e08c7057979959959d247 Mon Sep 17 00:00:00 2001 From: Gabriel Young Date: Sat, 18 Feb 2017 21:07:07 -0800 Subject: [PATCH 10/91] expose midi_config --- quantum/process_keycode/process_midi.c | 23 ++++++----------------- quantum/process_keycode/process_midi.h | 18 ++++++++++++++++++ 2 files changed, 24 insertions(+), 17 deletions(-) diff --git a/quantum/process_keycode/process_midi.c b/quantum/process_keycode/process_midi.c index 4d60aefb1c..9190fa0471 100644 --- a/quantum/process_keycode/process_midi.c +++ b/quantum/process_keycode/process_midi.c @@ -1,22 +1,6 @@ #include "process_midi.h" #include "timer.h" -typedef union { - uint32_t raw; - struct { - uint8_t octave :4; - int8_t transpose :4; - uint8_t velocity :4; - uint8_t channel :4; - uint8_t modulation_interval :4; - }; -} midi_config_t; - -midi_config_t midi_config; - -#define MIDI_INVALID_NOTE 0xFF - -#define MIDI_TONE_COUNT (MIDI_TONE_MAX - MIDI_TONE_MIN + 1) static uint8_t tone_status[MIDI_TONE_COUNT]; static uint8_t midi_modulation; @@ -70,6 +54,11 @@ void midi_task(void) } } +uint8_t midi_compute_note(uint16_t keycode) +{ + return 12 * midi_config.octave + (keycode - MIDI_TONE_MIN) + midi_config.transpose; +} + bool process_midi(uint16_t keycode, keyrecord_t *record) { switch (keycode) { @@ -79,7 +68,7 @@ bool process_midi(uint16_t keycode, keyrecord_t *record) uint8_t tone = keycode - MIDI_TONE_MIN; uint8_t velocity = compute_velocity(midi_config.velocity); if (record->event.pressed) { - uint8_t note = 12 * midi_config.octave + tone + midi_config.transpose; + uint8_t note = midi_compute_note(keycode); midi_send_noteon(&midi_device, channel, note, velocity); dprintf("midi noteon channel:%d note:%d velocity:%d\n", channel, note, velocity); tone_status[tone] = note; diff --git a/quantum/process_keycode/process_midi.h b/quantum/process_keycode/process_midi.h index 66ce60b0e5..ffd41579f2 100644 --- a/quantum/process_keycode/process_midi.h +++ b/quantum/process_keycode/process_midi.h @@ -4,8 +4,26 @@ #include "quantum.h" #include "midi.h" +typedef union { + uint32_t raw; + struct { + uint8_t octave :4; + int8_t transpose :4; + uint8_t velocity :4; + uint8_t channel :4; + uint8_t modulation_interval :4; + }; +} midi_config_t; + +midi_config_t midi_config; + void midi_init(void); void midi_task(void); bool process_midi(uint16_t keycode, keyrecord_t *record); +#define MIDI_INVALID_NOTE 0xFF +#define MIDI_TONE_COUNT (MIDI_TONE_MAX - MIDI_TONE_MIN + 1) + +uint8_t midi_compute_note(uint16_t keycode); + #endif \ No newline at end of file From d1fe24ad9f85768774ae50465c71f3757a33cc00 Mon Sep 17 00:00:00 2001 From: Gabriel Young Date: Sun, 19 Feb 2017 17:18:05 -0800 Subject: [PATCH 11/91] Allow customization of the number of tone keycodes and add example keymap --- keyboards/satan/keymaps/midi/Makefile | 21 +++++++ keyboards/satan/keymaps/midi/config.h | 11 ++++ keyboards/satan/keymaps/midi/keymap.c | 60 ++++++++++++++++++ keyboards/satan/keymaps/midi/readme.md | 1 + quantum/quantum_keycodes.h | 84 ++++++++++++++++++++++++++ quantum/template/config.h | 3 + 6 files changed, 180 insertions(+) create mode 100644 keyboards/satan/keymaps/midi/Makefile create mode 100644 keyboards/satan/keymaps/midi/config.h create mode 100644 keyboards/satan/keymaps/midi/keymap.c create mode 100644 keyboards/satan/keymaps/midi/readme.md diff --git a/keyboards/satan/keymaps/midi/Makefile b/keyboards/satan/keymaps/midi/Makefile new file mode 100644 index 0000000000..5cbda96cee --- /dev/null +++ b/keyboards/satan/keymaps/midi/Makefile @@ -0,0 +1,21 @@ +# Build Options +# change to "no" to disable the options, or define them in the Makefile in +# the appropriate keymap folder that will get included automatically +# +BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000) +MOUSEKEY_ENABLE = yes # Mouse keys(+4700) +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 = yes # Enable keyboard backlight functionality +MIDI_ENABLE = yes # MIDI controls +AUDIO_ENABLE = no # 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. +SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend + +ifndef QUANTUM_DIR + include ../../../../Makefile +endif diff --git a/keyboards/satan/keymaps/midi/config.h b/keyboards/satan/keymaps/midi/config.h new file mode 100644 index 0000000000..e345d40c96 --- /dev/null +++ b/keyboards/satan/keymaps/midi/config.h @@ -0,0 +1,11 @@ +#ifndef CONFIG_USER_H +#define CONFIG_USER_H + +#include "../../config.h" + +// place overrides here + +/* override number of MIDI tone keycodes (each octave adds 12 bytes) */ +#define MIDI_TONE_KEYCODE_OCTAVES 2 + +#endif \ No newline at end of file diff --git a/keyboards/satan/keymaps/midi/keymap.c b/keyboards/satan/keymaps/midi/keymap.c new file mode 100644 index 0000000000..ac97259331 --- /dev/null +++ b/keyboards/satan/keymaps/midi/keymap.c @@ -0,0 +1,60 @@ +#include "satan.h" + +// Each layer gets a name for readability, which is then used in the keymap matrix below. +// The underscores don't mean anything - you can have a layer called STUFF or any other name. +// Layer names don't all need to be of the same length, obviously, and you can also skip them +// entirely and just use numbers. +#define _BL 0 +#define _ML 1 + +// readability +#define _______ KC_TRNS +#define XXXXXXX KC_NO + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + /* Keymap _BL: (Base Layer) Default Layer + * ,-----------------------------------------------------------. + * |Esc | 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| =|Backsp | + * |-----------------------------------------------------------| + * |Tab | Q| W| E| R| T| Y| U| I| O| P| [| ]| \ | + * |-----------------------------------------------------------| + * |CAPS | A| S| D| F| G| H| J| K| L| ;| '|Return | + * |-----------------------------------------------------------| + * |Shift | Z| X| C| V| B| N| M| ,| .| /|Shift | + * |-----------------------------------------------------------| + * |Ctrl|Gui |Alt | Space |Alt |Gui |FN |Ctrl | + * `-----------------------------------------------------------' + */ +[_BL] = KEYMAP_ANSI( + KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, \ + KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC,KC_BSLS, \ + KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN,KC_QUOT, KC_ENT, \ + KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM,KC_DOT, KC_SLSH, KC_RSFT, \ + KC_LCTL, KC_LGUI,KC_LALT, KC_SPC, KC_RALT,KC_RGUI, TG(_ML), KC_RCTL), + +/* Keymap _ML: MIDI Layer + * ,------------------------------------------------------------------------. + * | Exit | | | | | | | | | | | | | | + * |------------------------------------------------------------------------| + * | Ch+ | | C# | D# | | F# | G# | A# | | C# | D# | | | | + * |------------------------------------------------------------------------| + * | Mod | C | D | E | F | G | A | B | C | D | E | F |>>OnStage| + * |------------------------------------------------------------------------| + * | Sustain |Oct-|Oct+|Mod-|Mod+| | | |Tns-|Tns+|Tns0| Sustain | + * |------------------------------------------------------------------------| + * | | | | All notes off | | | | | + * `------------------------------------------------------------------------' + * + * Foot switches: + * ,--------. ,--------. + * | | | | + * | | | | + * `--------' `--------' + */ +[_ML] = KEYMAP_ANSI( + TG(_ML), MI_VEL_1, MI_VEL_2, MI_VEL_3, MI_VEL_4, MI_VEL_5, MI_VEL_6, MI_VEL_7, MI_VEL_8, MI_VEL_9, MI_VEL_10, XXXXXXX, XXXXXXX, XXXXXXX, \ + MI_CHU, XXXXXXX, MI_Cs, MI_Ds, XXXXXXX, MI_Fs, MI_Gs, MI_As, XXXXXXX, MI_Cs_1, MI_Ds_1, XXXXXXX, XXXXXXX, XXXXXXX, \ + MI_MOD, MI_C, MI_D, MI_E, MI_F, MI_G, MI_A, MI_B, MI_C_1, MI_D_1, MI_E_1, MI_F_1, _______, \ + MI_SUS, MI_OCTD, MI_OCTU, MI_MODSD, MI_MODSU, XXXXXXX, XXXXXXX, XXXXXXX, MI_TRNSD, MI_TRNSU, MI_TRNS_0, MI_SUS, \ + _______, _______, _______, MI_OFF, _______, _______, _______, _______), +}; \ No newline at end of file diff --git a/keyboards/satan/keymaps/midi/readme.md b/keyboards/satan/keymaps/midi/readme.md new file mode 100644 index 0000000000..87844a854b --- /dev/null +++ b/keyboards/satan/keymaps/midi/readme.md @@ -0,0 +1 @@ +# Satan GH60 layout demonstrating MIDI key mapping diff --git a/quantum/quantum_keycodes.h b/quantum/quantum_keycodes.h index 30cc9abdb4..6d1438051e 100644 --- a/quantum/quantum_keycodes.h +++ b/quantum/quantum_keycodes.h @@ -2,6 +2,12 @@ #ifndef QUANTUM_KEYCODES_H #define QUANTUM_KEYCODES_H +#ifdef MIDI_ENABLE +#ifndef MIDI_TONE_KEYCODE_OCTAVES +#define MIDI_TONE_KEYCODE_OCTAVES 3 +#endif +#endif + enum quantum_keycodes { // Ranges used in shortucuts - not to be used directly QK_TMK = 0x0000, @@ -112,6 +118,7 @@ enum quantum_keycodes { MIDI_TONE_MIN, +#if MIDI_TONE_KEYCODE_OCTAVES > 0 MI_C = MIDI_TONE_MIN, MI_Cs, MI_Db = MI_Cs, @@ -129,7 +136,9 @@ enum quantum_keycodes { MI_As, MI_Bb = MI_As, MI_B, +#endif +#if MIDI_TONE_KEYCODE_OCTAVES > 1 MI_C_1, MI_Cs_1, MI_Db_1 = MI_Cs_1, @@ -147,7 +156,9 @@ enum quantum_keycodes { MI_As_1, MI_Bb_1 = MI_As_1, MI_B_1, +#endif +#if MIDI_TONE_KEYCODE_OCTAVES > 2 MI_C_2, MI_Cs_2, MI_Db_2 = MI_Cs_2, @@ -165,8 +176,81 @@ enum quantum_keycodes { MI_As_2, MI_Bb_2 = MI_As_2, MI_B_2, +#endif +#if MIDI_TONE_KEYCODE_OCTAVES > 3 + MI_C_3, + MI_Cs_3, + MI_Db_3 = MI_Cs_3, + MI_D_3, + MI_Ds_3, + MI_Eb_3 = MI_Ds_3, + MI_E_3, + MI_F_3, + MI_Fs_3, + MI_Gb_3 = MI_Fs_3, + MI_G_3, + MI_Gs_3, + MI_Ab_3 = MI_Gs_3, + MI_A_3, + MI_As_3, + MI_Bb_3 = MI_As_3, + MI_B_3, +#endif + +#if MIDI_TONE_KEYCODE_OCTAVES > 4 + MI_C_4, + MI_Cs_4, + MI_Db_4 = MI_Cs_4, + MI_D_4, + MI_Ds_4, + MI_Eb_4 = MI_Ds_4, + MI_E_4, + MI_F_4, + MI_Fs_4, + MI_Gb_4 = MI_Fs_4, + MI_G_4, + MI_Gs_4, + MI_Ab_4 = MI_Gs_4, + MI_A_4, + MI_As_4, + MI_Bb_4 = MI_As_4, + MI_B_4, +#endif + +#if MIDI_TONE_KEYCODE_OCTAVES > 5 + MI_C_5, + MI_Cs_5, + MI_Db_5 = MI_Cs_5, + MI_D_5, + MI_Ds_5, + MI_Eb_5 = MI_Ds_5, + MI_E_5, + MI_F_5, + MI_Fs_5, + MI_Gb_5 = MI_Fs_5, + MI_G_5, + MI_Gs_5, + MI_Ab_5 = MI_Gs_5, + MI_A_5, + MI_As_5, + MI_Bb_5 = MI_As_5, + MI_B_5, +#endif + +#if MIDI_TONE_KEYCODE_OCTAVES > 5 + MIDI_TONE_MAX = MI_B_5, +#elif MIDI_TONE_KEYCODE_OCTAVES > 4 + MIDI_TONE_MAX = MI_B_4, +#elif MIDI_TONE_KEYCODE_OCTAVES > 3 + MIDI_TONE_MAX = MI_B_3, +#elif MIDI_TONE_KEYCODE_OCTAVES > 2 MIDI_TONE_MAX = MI_B_2, +#elif MIDI_TONE_KEYCODE_OCTAVES > 1 + MIDI_TONE_MAX = MI_B_1, +#elif MIDI_TONE_KEYCODE_OCTAVES > 0 + MIDI_TONE_MAX = MI_B, +#endif MIDI_OCTAVE_MIN, MI_OCT_N2 = MIDI_OCTAVE_MIN, diff --git a/quantum/template/config.h b/quantum/template/config.h index c61c4a6181..d0bee0d89a 100644 --- a/quantum/template/config.h +++ b/quantum/template/config.h @@ -159,4 +159,7 @@ along with this program. If not, see . //#define NO_ACTION_MACRO //#define NO_ACTION_FUNCTION +/* override number of MIDI tone keycodes (each octave adds 12 bytes) */ +//#define MIDI_TONE_KEYCODE_OCTAVES 1 + #endif From ed15973a3ffff6e18e62f81654632b97961f18d2 Mon Sep 17 00:00:00 2001 From: Gabriel Young Date: Sun, 19 Feb 2017 17:45:08 -0800 Subject: [PATCH 12/91] Document size added by MIDI_ENABLE (~3800 bytes according to my experiments) satan/keymaps/midi MIDI_ENABLE = no text data bss dec hex filename 0 17080 0 17080 42b8 satan_midi.hex MIDI_ENABLE = yes #define MIDI_TONE_KEYCODE_OCTAVES 3 // default text data bss dec hex filename 0 20846 0 20846 516e satan_midi.hex MIDI_ENABLE = yes #define MIDI_TONE_KEYCODE_OCTAVES 2 // fewer octaves text data bss dec hex filename 0 20846 0 20846 516e satan_midi.hex --- keyboards/satan/keymaps/midi/Makefile | 2 +- keyboards/satan/keymaps/midi/config.h | 2 +- keyboards/satan/keymaps/midi/keymap.c | 2 ++ quantum/process_keycode/process_midi.c | 2 ++ quantum/template/config.h | 2 +- quantum/template/keymaps/default/Makefile | 2 +- 6 files changed, 8 insertions(+), 4 deletions(-) diff --git a/keyboards/satan/keymaps/midi/Makefile b/keyboards/satan/keymaps/midi/Makefile index 5cbda96cee..4e2d9d2f7c 100644 --- a/keyboards/satan/keymaps/midi/Makefile +++ b/keyboards/satan/keymaps/midi/Makefile @@ -9,7 +9,7 @@ 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 = yes # Enable keyboard backlight functionality -MIDI_ENABLE = yes # MIDI controls +MIDI_ENABLE = yes # MIDI support (+3800) AUDIO_ENABLE = no # Audio output on port C6 UNICODE_ENABLE = no # Unicode BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID diff --git a/keyboards/satan/keymaps/midi/config.h b/keyboards/satan/keymaps/midi/config.h index e345d40c96..0dbdb5cbcd 100644 --- a/keyboards/satan/keymaps/midi/config.h +++ b/keyboards/satan/keymaps/midi/config.h @@ -5,7 +5,7 @@ // place overrides here -/* override number of MIDI tone keycodes (each octave adds 12 bytes) */ +/* override number of MIDI tone keycodes (each octave adds 12 keycodes and allocates 12 bytes) */ #define MIDI_TONE_KEYCODE_OCTAVES 2 #endif \ No newline at end of file diff --git a/keyboards/satan/keymaps/midi/keymap.c b/keyboards/satan/keymaps/midi/keymap.c index ac97259331..004690f413 100644 --- a/keyboards/satan/keymaps/midi/keymap.c +++ b/keyboards/satan/keymaps/midi/keymap.c @@ -32,6 +32,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM,KC_DOT, KC_SLSH, KC_RSFT, \ KC_LCTL, KC_LGUI,KC_LALT, KC_SPC, KC_RALT,KC_RGUI, TG(_ML), KC_RCTL), +#ifdef MIDI_ENABLE /* Keymap _ML: MIDI Layer * ,------------------------------------------------------------------------. * | Exit | | | | | | | | | | | | | | @@ -57,4 +58,5 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { MI_MOD, MI_C, MI_D, MI_E, MI_F, MI_G, MI_A, MI_B, MI_C_1, MI_D_1, MI_E_1, MI_F_1, _______, \ MI_SUS, MI_OCTD, MI_OCTU, MI_MODSD, MI_MODSU, XXXXXXX, XXXXXXX, XXXXXXX, MI_TRNSD, MI_TRNSU, MI_TRNS_0, MI_SUS, \ _______, _______, _______, MI_OFF, _______, _______, _______, _______), +#endif }; \ No newline at end of file diff --git a/quantum/process_keycode/process_midi.c b/quantum/process_keycode/process_midi.c index 9190fa0471..5530ea97c4 100644 --- a/quantum/process_keycode/process_midi.c +++ b/quantum/process_keycode/process_midi.c @@ -1,3 +1,5 @@ +#define MIDI_TONE_KEYCODE_OCTAVES 2 + #include "process_midi.h" #include "timer.h" diff --git a/quantum/template/config.h b/quantum/template/config.h index d0bee0d89a..cd6dfa2c6a 100644 --- a/quantum/template/config.h +++ b/quantum/template/config.h @@ -159,7 +159,7 @@ along with this program. If not, see . //#define NO_ACTION_MACRO //#define NO_ACTION_FUNCTION -/* override number of MIDI tone keycodes (each octave adds 12 bytes) */ +/* override number of MIDI tone keycodes (each octave adds 12 keycodes and allocates 12 bytes) */ //#define MIDI_TONE_KEYCODE_OCTAVES 1 #endif diff --git a/quantum/template/keymaps/default/Makefile b/quantum/template/keymaps/default/Makefile index f4671a9d11..24442db37d 100644 --- a/quantum/template/keymaps/default/Makefile +++ b/quantum/template/keymaps/default/Makefile @@ -9,7 +9,7 @@ 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 -MIDI_ENABLE = no # MIDI controls +MIDI_ENABLE = no # MIDI support (+3800) AUDIO_ENABLE = no # Audio output on port C6 UNICODE_ENABLE = no # Unicode BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID From 64eecfc5303788bd82bf2fb466ec4a6f1bd0c028 Mon Sep 17 00:00:00 2001 From: Gabriel Young Date: Sun, 19 Feb 2017 22:23:06 -0800 Subject: [PATCH 13/91] fix typos in keymap --- keyboards/satan/keymaps/midi/keymap.c | 10 ++-------- 1 file changed, 2 insertions(+), 8 deletions(-) diff --git a/keyboards/satan/keymaps/midi/keymap.c b/keyboards/satan/keymaps/midi/keymap.c index 004690f413..397fe097bd 100644 --- a/keyboards/satan/keymaps/midi/keymap.c +++ b/keyboards/satan/keymaps/midi/keymap.c @@ -22,7 +22,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * |-----------------------------------------------------------| * |Shift | Z| X| C| V| B| N| M| ,| .| /|Shift | * |-----------------------------------------------------------| - * |Ctrl|Gui |Alt | Space |Alt |Gui |FN |Ctrl | + * |Ctrl|Gui |Alt | Space |Alt |Gui |Midi|Ctrl | * `-----------------------------------------------------------' */ [_BL] = KEYMAP_ANSI( @@ -39,18 +39,12 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * |------------------------------------------------------------------------| * | Ch+ | | C# | D# | | F# | G# | A# | | C# | D# | | | | * |------------------------------------------------------------------------| - * | Mod | C | D | E | F | G | A | B | C | D | E | F |>>OnStage| + * | Mod | C | D | E | F | G | A | B | C | D | E | F | | * |------------------------------------------------------------------------| * | Sustain |Oct-|Oct+|Mod-|Mod+| | | |Tns-|Tns+|Tns0| Sustain | * |------------------------------------------------------------------------| * | | | | All notes off | | | | | * `------------------------------------------------------------------------' - * - * Foot switches: - * ,--------. ,--------. - * | | | | - * | | | | - * `--------' `--------' */ [_ML] = KEYMAP_ANSI( TG(_ML), MI_VEL_1, MI_VEL_2, MI_VEL_3, MI_VEL_4, MI_VEL_5, MI_VEL_6, MI_VEL_7, MI_VEL_8, MI_VEL_9, MI_VEL_10, XXXXXXX, XXXXXXX, XXXXXXX, \ From 525be99ee938aa6e48448d7dd6ea6e6fe50bb36d Mon Sep 17 00:00:00 2001 From: Gabriel Young Date: Sat, 25 Feb 2017 15:02:43 -0800 Subject: [PATCH 14/91] Split MIDI functionality into MIDI_BASIC and MIDI_ADVANCED MIDI_ENABLE = no text data bss dec hex filename 0 17080 0 17080 42b8 satan_midi.hex MIDI_ENABLE = yes MIDI_BASIC undefined MIDI_ADVANCED undefined text data bss dec hex filename 0 19494 0 19494 4c26 satan_midi.hex MIDI_ENABLE = yes #define MIDI_BASIC MIDI_ADVANCED undefined text data bss dec hex filename 0 19788 0 19788 4d4c satan_midi.hex MIDI_ENABLE = yes MIDI_BASIC undefined #define MIDI_ADVANCED text data bss dec hex filename 0 20846 0 20846 516e satan_midi.hex MIDI_ENABLE = yes #define MIDI_BASIC #define MIDI_ADVANCED text data bss dec hex filename 0 21140 0 21140 5294 satan_midi.hex --- build_keyboard.mk | 1 + keyboards/satan/keymaps/midi/config.h | 17 ++++++++++++++++- keyboards/satan/keymaps/midi/keymap.c | 4 ++-- quantum/process_keycode/process_midi.c | 9 ++++++--- quantum/process_keycode/process_music.c | 22 ++++++++++++++++++++++ quantum/quantum.c | 4 ++-- quantum/quantum_keycodes.h | 13 ++++++++++--- quantum/template/config.h | 17 +++++++++++++++++ tmk_core/protocol/lufa/lufa.c | 4 ++++ 9 files changed, 80 insertions(+), 11 deletions(-) diff --git a/build_keyboard.mk b/build_keyboard.mk index 4a6fc0980f..eea8d5919a 100644 --- a/build_keyboard.mk +++ b/build_keyboard.mk @@ -141,6 +141,7 @@ endif ifeq ($(strip $(MIDI_ENABLE)), yes) OPT_DEFS += -DMIDI_ENABLE + SRC += $(QUANTUM_DIR)/process_keycode/process_music.c SRC += $(QUANTUM_DIR)/process_keycode/process_midi.c endif diff --git a/keyboards/satan/keymaps/midi/config.h b/keyboards/satan/keymaps/midi/config.h index 0dbdb5cbcd..59250b49e2 100644 --- a/keyboards/satan/keymaps/midi/config.h +++ b/keyboards/satan/keymaps/midi/config.h @@ -3,7 +3,22 @@ #include "../../config.h" -// place overrides here +/* + * MIDI options + */ + +/* enable basic MIDI features: + - MIDI notes can be sent when in Music mode is on +*/ +#define MIDI_BASIC + +/* enable advanced MIDI features: + - MIDI notes can be added to the keymap + - Octave shift and transpose + - Virtual sustain, portamento, and modulation wheel + - etc. +*/ +#define MIDI_ADVANCED /* override number of MIDI tone keycodes (each octave adds 12 keycodes and allocates 12 bytes) */ #define MIDI_TONE_KEYCODE_OCTAVES 2 diff --git a/keyboards/satan/keymaps/midi/keymap.c b/keyboards/satan/keymaps/midi/keymap.c index 397fe097bd..349391c3bf 100644 --- a/keyboards/satan/keymaps/midi/keymap.c +++ b/keyboards/satan/keymaps/midi/keymap.c @@ -32,7 +32,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM,KC_DOT, KC_SLSH, KC_RSFT, \ KC_LCTL, KC_LGUI,KC_LALT, KC_SPC, KC_RALT,KC_RGUI, TG(_ML), KC_RCTL), -#ifdef MIDI_ENABLE +#if defined(MIDI_ENABLE) && defined(MIDI_ADVANCED) /* Keymap _ML: MIDI Layer * ,------------------------------------------------------------------------. * | Exit | | | | | | | | | | | | | | @@ -51,6 +51,6 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { MI_CHU, XXXXXXX, MI_Cs, MI_Ds, XXXXXXX, MI_Fs, MI_Gs, MI_As, XXXXXXX, MI_Cs_1, MI_Ds_1, XXXXXXX, XXXXXXX, XXXXXXX, \ MI_MOD, MI_C, MI_D, MI_E, MI_F, MI_G, MI_A, MI_B, MI_C_1, MI_D_1, MI_E_1, MI_F_1, _______, \ MI_SUS, MI_OCTD, MI_OCTU, MI_MODSD, MI_MODSU, XXXXXXX, XXXXXXX, XXXXXXX, MI_TRNSD, MI_TRNSU, MI_TRNS_0, MI_SUS, \ - _______, _______, _______, MI_OFF, _______, _______, _______, _______), + _______, _______, _______, MI_ALLOFF, _______, _______, _______, _______), #endif }; \ No newline at end of file diff --git a/quantum/process_keycode/process_midi.c b/quantum/process_keycode/process_midi.c index 5530ea97c4..161f04a245 100644 --- a/quantum/process_keycode/process_midi.c +++ b/quantum/process_keycode/process_midi.c @@ -1,6 +1,7 @@ -#define MIDI_TONE_KEYCODE_OCTAVES 2 - #include "process_midi.h" + +#if defined(MIDI_ENABLE) && defined(MIDI_ADVANCED) + #include "timer.h" static uint8_t tone_status[MIDI_TONE_COUNT]; @@ -161,7 +162,7 @@ bool process_midi(uint16_t keycode, keyrecord_t *record) dprintf("midi channel %d\n", midi_config.channel); } return false; - case MI_OFF: + case MI_ALLOFF: if (record->event.pressed) { midi_send_cc(&midi_device, midi_config.channel, 0x7B, 0); dprintf("midi off\n"); @@ -209,3 +210,5 @@ bool process_midi(uint16_t keycode, keyrecord_t *record) return true; } + +#endif // MIDI_ADVANCED diff --git a/quantum/process_keycode/process_music.c b/quantum/process_keycode/process_music.c index 1e2648bff5..ac906b6281 100644 --- a/quantum/process_keycode/process_music.c +++ b/quantum/process_keycode/process_music.c @@ -17,6 +17,7 @@ static uint16_t music_sequence_interval = 100; bool process_music(uint16_t keycode, keyrecord_t *record) { + #ifdef AUDIO_ENABLE if (keycode == AU_ON && record->event.pressed) { audio_on(); return false; @@ -38,6 +39,7 @@ bool process_music(uint16_t keycode, keyrecord_t *record) { } return false; } + #endif // AUDIO_ENABLE if (keycode == MU_ON && record->event.pressed) { music_on(); @@ -61,6 +63,7 @@ bool process_music(uint16_t keycode, keyrecord_t *record) { return false; } + #ifdef AUDIO_ENABLE if (keycode == MUV_IN && record->event.pressed) { voice_iterate(); music_scale_user(); @@ -72,11 +75,14 @@ bool process_music(uint16_t keycode, keyrecord_t *record) { music_scale_user(); return false; } + #endif // AUDIO_ENABLE if (music_activated) { if (keycode == KC_LCTL && record->event.pressed) { // Start recording + #ifdef AUDIO_ENABLE stop_all_notes(); + #endif music_sequence_recording = true; music_sequence_recorded = false; music_sequence_playing = false; @@ -85,7 +91,9 @@ bool process_music(uint16_t keycode, keyrecord_t *record) { } if (keycode == KC_LALT && record->event.pressed) { // Stop recording/playing + #ifdef AUDIO_ENABLE stop_all_notes(); + #endif if (music_sequence_recording) { // was recording music_sequence_recorded = true; } @@ -95,7 +103,9 @@ bool process_music(uint16_t keycode, keyrecord_t *record) { } if (keycode == KC_LGUI && record->event.pressed && music_sequence_recorded) { // Start playing + #ifdef AUDIO_ENABLE stop_all_notes(); + #endif music_sequence_recording = false; music_sequence_playing = true; music_sequence_position = 0; @@ -116,6 +126,7 @@ bool process_music(uint16_t keycode, keyrecord_t *record) { } #define MUSIC_MODE_GUITAR + #ifdef AUDIO_ENABLE #ifdef MUSIC_MODE_CHROMATIC float freq = ((float)220.0)*pow(2.0, -5.0)*pow(2.0,(music_starting_note + record->event.key.col + music_offset)/12.0+(MATRIX_ROWS - record->event.key.row)); #elif defined(MUSIC_MODE_GUITAR) @@ -125,15 +136,20 @@ bool process_music(uint16_t keycode, keyrecord_t *record) { #else float freq = ((float)220.0)*pow(2.0, -5.0)*pow(2.0,(music_starting_note + SCALE[record->event.key.col + music_offset])/12.0+(MATRIX_ROWS - record->event.key.row)); #endif + #endif // AUDIO_ENABLE if (record->event.pressed) { + #ifdef AUDIO_ENABLE play_note(freq, 0xF); if (music_sequence_recording) { music_sequence[music_sequence_count] = freq; music_sequence_count++; } + #endif } else { + #ifdef AUDIO_ENABLE stop_note(freq); + #endif } if (keycode < 0xFF) // ignores all normal keycodes, but lets RAISE, LOWER, etc through @@ -161,15 +177,19 @@ void music_on(void) { void music_off(void) { music_activated = 0; + #ifdef AUDIO_ENABLE stop_all_notes(); + #endif } __attribute__ ((weak)) void music_on_user() {} +#ifdef AUDIO_ENABLE __attribute__ ((weak)) void audio_on_user() {} +#endif __attribute__ ((weak)) void music_scale_user() {} @@ -178,8 +198,10 @@ void matrix_scan_music(void) { if (music_sequence_playing) { if ((music_sequence_timer == 0) || (timer_elapsed(music_sequence_timer) > music_sequence_interval)) { music_sequence_timer = timer_read(); + #ifdef AUDIO_ENABLE stop_note(music_sequence[(music_sequence_position - 1 < 0)?(music_sequence_position - 1 + music_sequence_count):(music_sequence_position - 1)]); play_note(music_sequence[music_sequence_position], 0xF); + #endif music_sequence_position = (music_sequence_position + 1) % music_sequence_count; } } diff --git a/quantum/quantum.c b/quantum/quantum.c index 4a6d0355fa..83fa877088 100644 --- a/quantum/quantum.c +++ b/quantum/quantum.c @@ -150,10 +150,10 @@ bool process_record_quantum(keyrecord_t *record) { if (!( process_record_kb(keycode, record) && - #ifdef MIDI_ENABLE + #if defined(MIDI_ENABLE) && defined(MIDI_ADVANCED) process_midi(keycode, record) && #endif - #ifdef AUDIO_ENABLE + #if defined(AUDIO_ENABLE) || (defined(MIDI_ENABLE) && defined(MIDI_BASIC)) process_music(keycode, record) && #endif #ifdef TAP_DANCE_ENABLE diff --git a/quantum/quantum_keycodes.h b/quantum/quantum_keycodes.h index 6d1438051e..3b82b7208c 100644 --- a/quantum/quantum_keycodes.h +++ b/quantum/quantum_keycodes.h @@ -2,7 +2,7 @@ #ifndef QUANTUM_KEYCODES_H #define QUANTUM_KEYCODES_H -#ifdef MIDI_ENABLE +#if defined(MIDI_ENABLE) && defined(MIDI_ADVANCED) #ifndef MIDI_TONE_KEYCODE_OCTAVES #define MIDI_TONE_KEYCODE_OCTAVES 3 #endif @@ -116,6 +116,12 @@ enum quantum_keycodes { #ifdef MIDI_ENABLE // Midi +#ifdef MIDI_BASIC + MI_ON, // send midi notes when music mode is enabled + MI_OFF, // don't send midi notes when music mode is enabled +#endif + +#ifdef MIDI_ADVANCED MIDI_TONE_MIN, #if MIDI_TONE_KEYCODE_OCTAVES > 0 @@ -321,7 +327,7 @@ enum quantum_keycodes { MI_CHD, // previous channel MI_CHU, // next channel - MI_OFF, // all notes off + MI_ALLOFF, // all notes off MI_SUS, // sustain MI_PORT, // portamento @@ -332,7 +338,8 @@ enum quantum_keycodes { MI_MOD, // modulation MI_MODSD, // decrease modulation speed MI_MODSU, // increase modulation speed -#endif +#endif // MIDI_ADVANCED +#endif // MIDI_ENABLE // Backlight functionality BL_0, diff --git a/quantum/template/config.h b/quantum/template/config.h index cd6dfa2c6a..54db4f242f 100644 --- a/quantum/template/config.h +++ b/quantum/template/config.h @@ -159,6 +159,23 @@ along with this program. If not, see . //#define NO_ACTION_MACRO //#define NO_ACTION_FUNCTION +/* + * MIDI options + */ + +/* enable basic MIDI features: + - MIDI notes can be sent when in Music mode is on +*/ +//#define MIDI_BASIC + +/* enable advanced MIDI features: + - MIDI notes can be added to the keymap + - Octave shift and transpose + - Virtual sustain, portamento, and modulation wheel + - etc. +*/ +//#define MIDI_ADVANCED + /* override number of MIDI tone keycodes (each octave adds 12 keycodes and allocates 12 bytes) */ //#define MIDI_TONE_KEYCODE_OCTAVES 1 diff --git a/tmk_core/protocol/lufa/lufa.c b/tmk_core/protocol/lufa/lufa.c index bd24980573..651a0f3477 100644 --- a/tmk_core/protocol/lufa/lufa.c +++ b/tmk_core/protocol/lufa/lufa.c @@ -1104,7 +1104,9 @@ void sysex_callback(MidiDevice * device, void setup_midi(void) { +#ifdef MIDI_ADVANCED midi_init(); +#endif midi_device_init(&midi_device); midi_device_set_send_func(&midi_device, usb_send_func); midi_device_set_pre_input_process_func(&midi_device, usb_get_midi); @@ -1180,8 +1182,10 @@ int main(void) #ifdef MIDI_ENABLE midi_device_process(&midi_device); +#ifdef MIDI_ADVANCED midi_task(); #endif +#endif #if defined(RGBLIGHT_ANIMATIONS) & defined(RGBLIGHT_ENABLE) rgblight_task(); From 1000799d1ef594bf9f48076986ec300ef9e536db Mon Sep 17 00:00:00 2001 From: Gabriel Young Date: Sat, 25 Feb 2017 19:25:33 -0800 Subject: [PATCH 15/91] Factor basic note processing into respective processors --- build_keyboard.mk | 1 + quantum/process_keycode/process_audio.c | 62 +++++++++++ quantum/process_keycode/process_audio.h | 11 ++ quantum/process_keycode/process_midi.c | 28 ++++- quantum/process_keycode/process_midi.h | 13 ++- quantum/process_keycode/process_music.c | 137 ++++++++++-------------- quantum/process_keycode/process_music.h | 5 +- quantum/quantum.c | 3 + quantum/quantum.h | 7 +- 9 files changed, 184 insertions(+), 83 deletions(-) create mode 100644 quantum/process_keycode/process_audio.c create mode 100644 quantum/process_keycode/process_audio.h diff --git a/build_keyboard.mk b/build_keyboard.mk index eea8d5919a..07dfe85b45 100644 --- a/build_keyboard.mk +++ b/build_keyboard.mk @@ -157,6 +157,7 @@ endif ifeq ($(strip $(AUDIO_ENABLE)), yes) OPT_DEFS += -DAUDIO_ENABLE SRC += $(QUANTUM_DIR)/process_keycode/process_music.c + SRC += $(QUANTUM_DIR)/process_keycode/process_audio.c SRC += $(QUANTUM_DIR)/audio/audio.c SRC += $(QUANTUM_DIR)/audio/voices.c SRC += $(QUANTUM_DIR)/audio/luts.c diff --git a/quantum/process_keycode/process_audio.c b/quantum/process_keycode/process_audio.c new file mode 100644 index 0000000000..5b5da546ea --- /dev/null +++ b/quantum/process_keycode/process_audio.c @@ -0,0 +1,62 @@ +#include "process_audio.h" +#include "audio.h" + +static float compute_freq_for_midi_note(uint8_t note) +{ + // https://en.wikipedia.org/wiki/MIDI_tuning_standard + return pow(2.0, (note - 69) / 12.0) * 440.0f; +} + +bool process_audio(uint16_t keycode, keyrecord_t *record) { + + if (keycode == AU_ON && record->event.pressed) { + audio_on(); + return false; + } + + if (keycode == AU_OFF && record->event.pressed) { + audio_off(); + return false; + } + + if (keycode == AU_TOG && record->event.pressed) { + if (is_audio_on()) + { + audio_off(); + } + else + { + audio_on(); + } + return false; + } + + if (keycode == MUV_IN && record->event.pressed) { + voice_iterate(); + music_scale_user(); + return false; + } + + if (keycode == MUV_DE && record->event.pressed) { + voice_deiterate(); + music_scale_user(); + return false; + } + + return true +} + +void process_audio_noteon(uint8_t note) { + play_note(compute_freq_for_midi_note(note), 0xF); +} + +void process_audio_noteoff(uint8_t note) { + stop_note(compute_freq_for_midi_note(note)); +} + +void process_audio_stop_all_notes(void) { + stop_all_notes(); +} + +__attribute__ ((weak)) +void audio_on_user() {} \ No newline at end of file diff --git a/quantum/process_keycode/process_audio.h b/quantum/process_keycode/process_audio.h new file mode 100644 index 0000000000..59a17725a7 --- /dev/null +++ b/quantum/process_keycode/process_audio.h @@ -0,0 +1,11 @@ +#ifndef PROCESS_AUDIO_H +#define PROCESS_AUDIO_H + +bool process_audio(uint16_t keycode, keyrecord_t *record); +void process_audio_noteon(uint8_t note); +void process_audio_noteoff(uint8_t note); +void process_audio_stop_all_notes(void); + +void audio_on_user(void); + +#endif \ No newline at end of file diff --git a/quantum/process_keycode/process_midi.c b/quantum/process_keycode/process_midi.c index 161f04a245..214bba9020 100644 --- a/quantum/process_keycode/process_midi.c +++ b/quantum/process_keycode/process_midi.c @@ -1,6 +1,28 @@ #include "process_midi.h" -#if defined(MIDI_ENABLE) && defined(MIDI_ADVANCED) +#ifdef MIDI_ENABLE +#include "midi.h" + +#ifdef MIDI_BASIC + +void process_midi_basic_noteon(uint8_t note) +{ + midi_send_noteon(&midi_device, 0, note, 128); +} + +void process_midi_basic_noteoff(uint8_t note) +{ + midi_send_noteoff(&midi_device, 0, note, 0); +} + +void process_midi_basic_stop_all_notes(void) +{ + midi_send_cc(&midi_device, 0, 0x7B, 0); +} + +#endif // MIDI_BASIC + +#ifdef MIDI_ADVANCED #include "timer.h" @@ -165,7 +187,7 @@ bool process_midi(uint16_t keycode, keyrecord_t *record) case MI_ALLOFF: if (record->event.pressed) { midi_send_cc(&midi_device, midi_config.channel, 0x7B, 0); - dprintf("midi off\n"); + dprintf("midi all notes off\n"); } return false; case MI_SUS: @@ -212,3 +234,5 @@ bool process_midi(uint16_t keycode, keyrecord_t *record) } #endif // MIDI_ADVANCED + +#endif // MIDI_ENABLE diff --git a/quantum/process_keycode/process_midi.h b/quantum/process_keycode/process_midi.h index ffd41579f2..0f559ec23a 100644 --- a/quantum/process_keycode/process_midi.h +++ b/quantum/process_keycode/process_midi.h @@ -2,8 +2,16 @@ #define PROCESS_MIDI_H #include "quantum.h" -#include "midi.h" +#ifdef MIDI_ENABLE + +#ifdef MIDI_BASIC +void process_midi_basic_noteon(uint8_t note); +void process_midi_basic_noteoff(uint8_t note); +void process_midi_basic_stop_all_notes(void); +#endif + +#ifdef MIDI_ADVANCED typedef union { uint32_t raw; struct { @@ -25,5 +33,8 @@ bool process_midi(uint16_t keycode, keyrecord_t *record); #define MIDI_TONE_COUNT (MIDI_TONE_MAX - MIDI_TONE_MIN + 1) uint8_t midi_compute_note(uint16_t keycode); +#endif // MIDI_ADVANCED + +#endif // MIDI_ENABLE #endif \ No newline at end of file diff --git a/quantum/process_keycode/process_music.c b/quantum/process_keycode/process_music.c index ac906b6281..a1e270df17 100644 --- a/quantum/process_keycode/process_music.c +++ b/quantum/process_keycode/process_music.c @@ -1,5 +1,14 @@ #include "process_music.h" +#ifdef AUDIO_ENABLE +#include "process_audio.h" +#endif +#if defined(MIDI_ENABLE) && defined(MIDI_BASIC) +#include "process_midi.h" +#endif + +#if defined(AUDIO_ENABLE) || (defined(MIDI_ENABLE) && defined(MIDI_BASIC)) + bool music_activated = false; uint8_t music_starting_note = 0x0C; int music_offset = 7; @@ -8,38 +17,41 @@ int music_offset = 7; static bool music_sequence_recording = false; static bool music_sequence_recorded = false; static bool music_sequence_playing = false; -static float music_sequence[16] = {0}; +static uint8_t music_sequence[16] = {0}; static uint8_t music_sequence_count = 0; static uint8_t music_sequence_position = 0; static uint16_t music_sequence_timer = 0; static uint16_t music_sequence_interval = 100; -bool process_music(uint16_t keycode, keyrecord_t *record) { +static void music_noteon(uint8_t note) { + #ifdef AUDIO_ENABLE + process_audio_noteon(note); + #endif + #if defined(MIDI_ENABLE) && defined(MIDI_BASIC) + process_midi_basic_noteon(note); + #endif +} - #ifdef AUDIO_ENABLE - if (keycode == AU_ON && record->event.pressed) { - audio_on(); - return false; - } +static void music_noteoff(uint8_t note) { + #ifdef AUDIO_ENABLE + process_audio_noteoff(note); + #endif + #if defined(MIDI_ENABLE) && defined(MIDI_BASIC) + process_midi_basic_noteoff(note); + #endif +} - if (keycode == AU_OFF && record->event.pressed) { - audio_off(); - return false; - } +static void music_all_notes_off(void) { + #ifdef AUDIO_ENABLE + process_audio_stop_all_notes(); + #endif + #if defined(MIDI_ENABLE) && defined(MIDI_BASIC) + process_midi_basic_stop_all_notes(); + #endif +} - if (keycode == AU_TOG && record->event.pressed) { - if (is_audio_on()) - { - audio_off(); - } - else - { - audio_on(); - } - return false; - } - #endif // AUDIO_ENABLE +bool process_music(uint16_t keycode, keyrecord_t *record) { if (keycode == MU_ON && record->event.pressed) { music_on(); @@ -63,26 +75,10 @@ bool process_music(uint16_t keycode, keyrecord_t *record) { return false; } - #ifdef AUDIO_ENABLE - if (keycode == MUV_IN && record->event.pressed) { - voice_iterate(); - music_scale_user(); - return false; - } - - if (keycode == MUV_DE && record->event.pressed) { - voice_deiterate(); - music_scale_user(); - return false; - } - #endif // AUDIO_ENABLE - if (music_activated) { if (keycode == KC_LCTL && record->event.pressed) { // Start recording - #ifdef AUDIO_ENABLE - stop_all_notes(); - #endif + music_all_notes_off(); music_sequence_recording = true; music_sequence_recorded = false; music_sequence_playing = false; @@ -91,9 +87,7 @@ bool process_music(uint16_t keycode, keyrecord_t *record) { } if (keycode == KC_LALT && record->event.pressed) { // Stop recording/playing - #ifdef AUDIO_ENABLE - stop_all_notes(); - #endif + music_all_notes_off(); if (music_sequence_recording) { // was recording music_sequence_recorded = true; } @@ -103,9 +97,7 @@ bool process_music(uint16_t keycode, keyrecord_t *record) { } if (keycode == KC_LGUI && record->event.pressed && music_sequence_recorded) { // Start playing - #ifdef AUDIO_ENABLE - stop_all_notes(); - #endif + music_all_notes_off(); music_sequence_recording = false; music_sequence_playing = true; music_sequence_position = 0; @@ -124,32 +116,27 @@ bool process_music(uint16_t keycode, keyrecord_t *record) { music_sequence_interval+=10; return false; } + #define MUSIC_MODE_GUITAR - #ifdef AUDIO_ENABLE #ifdef MUSIC_MODE_CHROMATIC - float freq = ((float)220.0)*pow(2.0, -5.0)*pow(2.0,(music_starting_note + record->event.key.col + music_offset)/12.0+(MATRIX_ROWS - record->event.key.row)); + uint8_t note = (music_starting_note + record->event.key.col + music_offset - 3)+12*(MATRIX_ROWS - record->event.key.row); #elif defined(MUSIC_MODE_GUITAR) - float freq = ((float)220.0)*pow(2.0, -5.0)*pow(2.0,(music_starting_note + record->event.key.col + music_offset)/12.0+(float)(MATRIX_ROWS - record->event.key.row + 7)*5.0/12); + uint8_t note = (music_starting_note + record->event.key.col + music_offset + 32)+5*(MATRIX_ROWS - record->event.key.row); #elif defined(MUSIC_MODE_VIOLIN) - float freq = ((float)220.0)*pow(2.0, -5.0)*pow(2.0,(music_starting_note + record->event.key.col + music_offset)/12.0+(float)(MATRIX_ROWS - record->event.key.row + 5)*7.0/12); + uint8_t note = (music_starting_note + record->event.key.col + music_offset + 32)+7*(MATRIX_ROWS - record->event.key.row); #else - float freq = ((float)220.0)*pow(2.0, -5.0)*pow(2.0,(music_starting_note + SCALE[record->event.key.col + music_offset])/12.0+(MATRIX_ROWS - record->event.key.row)); + uint8_t note = (music_starting_note + SCALE[record->event.key.col + music_offset] - 3)+12*(MATRIX_ROWS - record->event.key.row); #endif - #endif // AUDIO_ENABLE if (record->event.pressed) { - #ifdef AUDIO_ENABLE - play_note(freq, 0xF); + music_noteon(note); if (music_sequence_recording) { - music_sequence[music_sequence_count] = freq; + music_sequence[music_sequence_count] = note; music_sequence_count++; } - #endif } else { - #ifdef AUDIO_ENABLE - stop_note(freq); - #endif + music_noteoff(note); } if (keycode < 0xFF) // ignores all normal keycodes, but lets RAISE, LOWER, etc through @@ -177,32 +164,26 @@ void music_on(void) { void music_off(void) { music_activated = 0; - #ifdef AUDIO_ENABLE - stop_all_notes(); - #endif + music_all_notes_off(); } - -__attribute__ ((weak)) -void music_on_user() {} - -#ifdef AUDIO_ENABLE -__attribute__ ((weak)) -void audio_on_user() {} -#endif - -__attribute__ ((weak)) -void music_scale_user() {} - void matrix_scan_music(void) { if (music_sequence_playing) { if ((music_sequence_timer == 0) || (timer_elapsed(music_sequence_timer) > music_sequence_interval)) { music_sequence_timer = timer_read(); - #ifdef AUDIO_ENABLE - stop_note(music_sequence[(music_sequence_position - 1 < 0)?(music_sequence_position - 1 + music_sequence_count):(music_sequence_position - 1)]); - play_note(music_sequence[music_sequence_position], 0xF); - #endif + uint8_t prev_note = music_sequence[(music_sequence_position - 1 < 0)?(music_sequence_position - 1 + music_sequence_count):(music_sequence_position - 1)]; + uint8_t next_note = music_sequence[music_sequence_position]; + music_noteoff(prev_note); + music_noteon(next_note); music_sequence_position = (music_sequence_position + 1) % music_sequence_count; } } } + +__attribute__ ((weak)) +void music_on_user() {} + +__attribute__ ((weak)) +void music_scale_user() {} + +#endif // defined(AUDIO_ENABLE) || (defined(MIDI_ENABLE) && defined(MIDI_BASIC)) \ No newline at end of file diff --git a/quantum/process_keycode/process_music.h b/quantum/process_keycode/process_music.h index 318b3e3875..69913b2761 100644 --- a/quantum/process_keycode/process_music.h +++ b/quantum/process_keycode/process_music.h @@ -3,6 +3,8 @@ #include "quantum.h" +#if defined(AUDIO_ENABLE) || (defined(MIDI_ENABLE) && defined(MIDI_BASIC)) + bool process_music(uint16_t keycode, keyrecord_t *record); bool is_music_on(void); @@ -10,7 +12,6 @@ void music_toggle(void); void music_on(void); void music_off(void); -void audio_on_user(void); void music_on_user(void); void music_scale_user(void); @@ -24,4 +25,6 @@ void matrix_scan_music(void); 0 + (12*4), 2 + (12*4), 4 + (12*4), 5 + (12*4), 7 + (12*4), 9 + (12*4), 11 + (12*4), } #endif +#endif // defined(AUDIO_ENABLE) || (defined(MIDI_ENABLE) && defined(MIDI_BASIC)) + #endif \ No newline at end of file diff --git a/quantum/quantum.c b/quantum/quantum.c index 83fa877088..7a27a568ac 100644 --- a/quantum/quantum.c +++ b/quantum/quantum.c @@ -153,6 +153,9 @@ bool process_record_quantum(keyrecord_t *record) { #if defined(MIDI_ENABLE) && defined(MIDI_ADVANCED) process_midi(keycode, record) && #endif + #ifdef AUDIO_ENABLE + process_audio(keycode, record) && + #endif #if defined(AUDIO_ENABLE) || (defined(MIDI_ENABLE) && defined(MIDI_BASIC)) process_music(keycode, record) && #endif diff --git a/quantum/quantum.h b/quantum/quantum.h index 580d51202a..77732d43f2 100644 --- a/quantum/quantum.h +++ b/quantum/quantum.h @@ -35,11 +35,16 @@ extern uint32_t default_layer_state; #ifdef MIDI_ENABLE #include +#ifdef MIDI_ADVANCED #include "process_midi.h" #endif +#endif // MIDI_ENABLE #ifdef AUDIO_ENABLE - #include "audio.h" + #include "process_audio.h" +#endif + +#if defined(AUDIO_ENABLE) || (defined(MIDI_ENABLE) && defined(MIDI_BASIC)) #include "process_music.h" #endif From ea14ed122fb5c1b3be5f5d6edda9b39b151692e5 Mon Sep 17 00:00:00 2001 From: Gabriel Young Date: Sat, 25 Feb 2017 19:37:33 -0800 Subject: [PATCH 16/91] Add basic layer to sample MIDI keycap --- keyboards/satan/keymaps/midi/keymap.c | 23 ++++++++++++++++++++++- quantum/process_keycode/process_audio.c | 2 +- quantum/process_keycode/process_music.c | 3 ++- 3 files changed, 25 insertions(+), 3 deletions(-) diff --git a/keyboards/satan/keymaps/midi/keymap.c b/keyboards/satan/keymaps/midi/keymap.c index 349391c3bf..8378b4e4b9 100644 --- a/keyboards/satan/keymaps/midi/keymap.c +++ b/keyboards/satan/keymaps/midi/keymap.c @@ -33,7 +33,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { KC_LCTL, KC_LGUI,KC_LALT, KC_SPC, KC_RALT,KC_RGUI, TG(_ML), KC_RCTL), #if defined(MIDI_ENABLE) && defined(MIDI_ADVANCED) -/* Keymap _ML: MIDI Layer +/* Keymap _ML: MIDI Layer (Advanced) * ,------------------------------------------------------------------------. * | Exit | | | | | | | | | | | | | | * |------------------------------------------------------------------------| @@ -52,5 +52,26 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { MI_MOD, MI_C, MI_D, MI_E, MI_F, MI_G, MI_A, MI_B, MI_C_1, MI_D_1, MI_E_1, MI_F_1, _______, \ MI_SUS, MI_OCTD, MI_OCTU, MI_MODSD, MI_MODSU, XXXXXXX, XXXXXXX, XXXXXXX, MI_TRNSD, MI_TRNSU, MI_TRNS_0, MI_SUS, \ _______, _______, _______, MI_ALLOFF, _______, _______, _______, _______), +#elif defined(MIDI_ENABLE) && defined(MIDI_BASIC) +/* Keymap _ML: MIDI Layer (Advanced) + * ,------------------------------------------------------------------------. + * | Exit | | | | | | | | | | | | | | + * |------------------------------------------------------------------------| + * | | | | | | | | | | | | | | | + * |------------------------------------------------------------------------| + * | | | | | | | | | | | | | | + * |------------------------------------------------------------------------| + * | |MuOn|MuOf|MiOn|MiOf| | | | | | | | + * |------------------------------------------------------------------------| + * | | | | | | | | | + * `------------------------------------------------------------------------' + */ + +[_ML] = KEYMAP_ANSI( + TG(_ML), _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \ + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \ + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \ + _______, MU_ON, MU_OFF, MI_ON, MI_OFF, _______, _______, _______, _______, _______, _______, _______, \ + _______, _______, _______, _______, _______, _______, _______, _______), #endif }; \ No newline at end of file diff --git a/quantum/process_keycode/process_audio.c b/quantum/process_keycode/process_audio.c index 5b5da546ea..d45242c9e0 100644 --- a/quantum/process_keycode/process_audio.c +++ b/quantum/process_keycode/process_audio.c @@ -28,7 +28,7 @@ bool process_audio(uint16_t keycode, keyrecord_t *record) { { audio_on(); } - return false; + return false; } if (keycode == MUV_IN && record->event.pressed) { diff --git a/quantum/process_keycode/process_music.c b/quantum/process_keycode/process_music.c index a1e270df17..43bcf973e9 100644 --- a/quantum/process_keycode/process_music.c +++ b/quantum/process_keycode/process_music.c @@ -142,7 +142,8 @@ bool process_music(uint16_t keycode, keyrecord_t *record) { if (keycode < 0xFF) // ignores all normal keycodes, but lets RAISE, LOWER, etc through return false; } - return true; + + return true; } bool is_music_on(void) { From a64ae1066250d3aafb6e9670bf617237ec4338e7 Mon Sep 17 00:00:00 2001 From: Gabriel Young Date: Sat, 25 Feb 2017 20:41:13 -0800 Subject: [PATCH 17/91] Update existing keymaps Update existing keymaps to enable MIDI_BASIC functionality. Also added an option MIDI_ENABLE_STRICT to be strict about keycode use (which also reduces memory footprint at runtime) --- keyboards/planck/keymaps/dbroqua/config.h | 29 +++++++++++++++++++ keyboards/planck/keymaps/default/config.h | 29 +++++++++++++++++++ .../planck/keymaps/experimental/config.h | 23 +++++++++++++++ keyboards/planck/keymaps/impossible/config.h | 29 +++++++++++++++++++ keyboards/planck/keymaps/jeebak/config.h | 29 +++++++++++++++++++ keyboards/planck/keymaps/jhenahan/config.h | 23 +++++++++++++++ keyboards/planck/keymaps/premek/config.h | 29 +++++++++++++++++++ keyboards/planck/keymaps/sgoodwin/config.h | 29 +++++++++++++++++++ keyboards/planck/keymaps/smt/config.h | 29 +++++++++++++++++++ .../planck/keymaps/thermal_printer/config.h | 23 +++++++++++++++ keyboards/planck/keymaps/unicode/config.h | 29 +++++++++++++++++++ keyboards/planck/keymaps/xyverz/config.h | 29 +++++++++++++++++++ .../preonic/keymaps/CMD-Preonic/config.h | 29 +++++++++++++++++++ keyboards/preonic/keymaps/default/config.h | 29 +++++++++++++++++++ keyboards/preonic/keymaps/smt/config.h | 29 +++++++++++++++++++ keyboards/satan/keymaps/midi/config.h | 3 ++ keyboards/subatomic/keymaps/default/config.h | 29 +++++++++++++++++++ quantum/process_keycode/process_audio.c | 4 +-- quantum/process_keycode/process_music.c | 2 +- quantum/process_keycode/process_music.h | 1 + quantum/quantum.c | 4 +-- quantum/quantum_keycodes.h | 28 +++++++++--------- quantum/template/config.h | 3 ++ 23 files changed, 472 insertions(+), 19 deletions(-) create mode 100644 keyboards/planck/keymaps/dbroqua/config.h create mode 100644 keyboards/planck/keymaps/default/config.h create mode 100644 keyboards/planck/keymaps/impossible/config.h create mode 100644 keyboards/planck/keymaps/jeebak/config.h create mode 100644 keyboards/planck/keymaps/premek/config.h create mode 100644 keyboards/planck/keymaps/sgoodwin/config.h create mode 100644 keyboards/planck/keymaps/smt/config.h create mode 100644 keyboards/planck/keymaps/unicode/config.h create mode 100644 keyboards/planck/keymaps/xyverz/config.h create mode 100644 keyboards/preonic/keymaps/CMD-Preonic/config.h create mode 100644 keyboards/preonic/keymaps/default/config.h create mode 100644 keyboards/preonic/keymaps/smt/config.h create mode 100644 keyboards/subatomic/keymaps/default/config.h diff --git a/keyboards/planck/keymaps/dbroqua/config.h b/keyboards/planck/keymaps/dbroqua/config.h new file mode 100644 index 0000000000..4c61581993 --- /dev/null +++ b/keyboards/planck/keymaps/dbroqua/config.h @@ -0,0 +1,29 @@ +#ifndef CONFIG_USER_H +#define CONFIG_USER_H + +#include "../../config.h" + +/* + * MIDI options + */ + +/* Prevent use of disabled MIDI features in the keymap */ +//#define MIDI_ENABLE_STRICT 1 + +/* enable basic MIDI features: + - MIDI notes can be sent when in Music mode is on +*/ +#define MIDI_BASIC + +/* enable advanced MIDI features: + - MIDI notes can be added to the keymap + - Octave shift and transpose + - Virtual sustain, portamento, and modulation wheel + - etc. +*/ +//#define MIDI_ADVANCED + +/* override number of MIDI tone keycodes (each octave adds 12 keycodes and allocates 12 bytes) */ +//#define MIDI_TONE_KEYCODE_OCTAVES 2 + +#endif \ No newline at end of file diff --git a/keyboards/planck/keymaps/default/config.h b/keyboards/planck/keymaps/default/config.h new file mode 100644 index 0000000000..4c61581993 --- /dev/null +++ b/keyboards/planck/keymaps/default/config.h @@ -0,0 +1,29 @@ +#ifndef CONFIG_USER_H +#define CONFIG_USER_H + +#include "../../config.h" + +/* + * MIDI options + */ + +/* Prevent use of disabled MIDI features in the keymap */ +//#define MIDI_ENABLE_STRICT 1 + +/* enable basic MIDI features: + - MIDI notes can be sent when in Music mode is on +*/ +#define MIDI_BASIC + +/* enable advanced MIDI features: + - MIDI notes can be added to the keymap + - Octave shift and transpose + - Virtual sustain, portamento, and modulation wheel + - etc. +*/ +//#define MIDI_ADVANCED + +/* override number of MIDI tone keycodes (each octave adds 12 keycodes and allocates 12 bytes) */ +//#define MIDI_TONE_KEYCODE_OCTAVES 2 + +#endif \ No newline at end of file diff --git a/keyboards/planck/keymaps/experimental/config.h b/keyboards/planck/keymaps/experimental/config.h index cc093bee49..492490ca1c 100644 --- a/keyboards/planck/keymaps/experimental/config.h +++ b/keyboards/planck/keymaps/experimental/config.h @@ -14,4 +14,27 @@ #define RGBLIGHT_HUE_STEP 10 #define RGBLIGHT_SAT_STEP 17 +/* + * MIDI options + */ + +/* Prevent use of disabled MIDI features in the keymap */ +//#define MIDI_ENABLE_STRICT 1 + +/* enable basic MIDI features: + - MIDI notes can be sent when in Music mode is on +*/ +#define MIDI_BASIC + +/* enable advanced MIDI features: + - MIDI notes can be added to the keymap + - Octave shift and transpose + - Virtual sustain, portamento, and modulation wheel + - etc. +*/ +//#define MIDI_ADVANCED + +/* override number of MIDI tone keycodes (each octave adds 12 keycodes and allocates 12 bytes) */ +//#define MIDI_TONE_KEYCODE_OCTAVES 2 + #endif diff --git a/keyboards/planck/keymaps/impossible/config.h b/keyboards/planck/keymaps/impossible/config.h new file mode 100644 index 0000000000..4c61581993 --- /dev/null +++ b/keyboards/planck/keymaps/impossible/config.h @@ -0,0 +1,29 @@ +#ifndef CONFIG_USER_H +#define CONFIG_USER_H + +#include "../../config.h" + +/* + * MIDI options + */ + +/* Prevent use of disabled MIDI features in the keymap */ +//#define MIDI_ENABLE_STRICT 1 + +/* enable basic MIDI features: + - MIDI notes can be sent when in Music mode is on +*/ +#define MIDI_BASIC + +/* enable advanced MIDI features: + - MIDI notes can be added to the keymap + - Octave shift and transpose + - Virtual sustain, portamento, and modulation wheel + - etc. +*/ +//#define MIDI_ADVANCED + +/* override number of MIDI tone keycodes (each octave adds 12 keycodes and allocates 12 bytes) */ +//#define MIDI_TONE_KEYCODE_OCTAVES 2 + +#endif \ No newline at end of file diff --git a/keyboards/planck/keymaps/jeebak/config.h b/keyboards/planck/keymaps/jeebak/config.h new file mode 100644 index 0000000000..4c61581993 --- /dev/null +++ b/keyboards/planck/keymaps/jeebak/config.h @@ -0,0 +1,29 @@ +#ifndef CONFIG_USER_H +#define CONFIG_USER_H + +#include "../../config.h" + +/* + * MIDI options + */ + +/* Prevent use of disabled MIDI features in the keymap */ +//#define MIDI_ENABLE_STRICT 1 + +/* enable basic MIDI features: + - MIDI notes can be sent when in Music mode is on +*/ +#define MIDI_BASIC + +/* enable advanced MIDI features: + - MIDI notes can be added to the keymap + - Octave shift and transpose + - Virtual sustain, portamento, and modulation wheel + - etc. +*/ +//#define MIDI_ADVANCED + +/* override number of MIDI tone keycodes (each octave adds 12 keycodes and allocates 12 bytes) */ +//#define MIDI_TONE_KEYCODE_OCTAVES 2 + +#endif \ No newline at end of file diff --git a/keyboards/planck/keymaps/jhenahan/config.h b/keyboards/planck/keymaps/jhenahan/config.h index cd3adc41cc..1e42b92b9c 100644 --- a/keyboards/planck/keymaps/jhenahan/config.h +++ b/keyboards/planck/keymaps/jhenahan/config.h @@ -6,4 +6,27 @@ #define FORCE_NKRO #define WORKMAN_SOUND COLEMAK_SOUND +/* + * MIDI options + */ + +/* Prevent use of disabled MIDI features in the keymap */ +//#define MIDI_ENABLE_STRICT 1 + +/* enable basic MIDI features: + - MIDI notes can be sent when in Music mode is on +*/ +#define MIDI_BASIC + +/* enable advanced MIDI features: + - MIDI notes can be added to the keymap + - Octave shift and transpose + - Virtual sustain, portamento, and modulation wheel + - etc. +*/ +//#define MIDI_ADVANCED + +/* override number of MIDI tone keycodes (each octave adds 12 keycodes and allocates 12 bytes) */ +//#define MIDI_TONE_KEYCODE_OCTAVES 2 + #endif diff --git a/keyboards/planck/keymaps/premek/config.h b/keyboards/planck/keymaps/premek/config.h new file mode 100644 index 0000000000..4c61581993 --- /dev/null +++ b/keyboards/planck/keymaps/premek/config.h @@ -0,0 +1,29 @@ +#ifndef CONFIG_USER_H +#define CONFIG_USER_H + +#include "../../config.h" + +/* + * MIDI options + */ + +/* Prevent use of disabled MIDI features in the keymap */ +//#define MIDI_ENABLE_STRICT 1 + +/* enable basic MIDI features: + - MIDI notes can be sent when in Music mode is on +*/ +#define MIDI_BASIC + +/* enable advanced MIDI features: + - MIDI notes can be added to the keymap + - Octave shift and transpose + - Virtual sustain, portamento, and modulation wheel + - etc. +*/ +//#define MIDI_ADVANCED + +/* override number of MIDI tone keycodes (each octave adds 12 keycodes and allocates 12 bytes) */ +//#define MIDI_TONE_KEYCODE_OCTAVES 2 + +#endif \ No newline at end of file diff --git a/keyboards/planck/keymaps/sgoodwin/config.h b/keyboards/planck/keymaps/sgoodwin/config.h new file mode 100644 index 0000000000..4c61581993 --- /dev/null +++ b/keyboards/planck/keymaps/sgoodwin/config.h @@ -0,0 +1,29 @@ +#ifndef CONFIG_USER_H +#define CONFIG_USER_H + +#include "../../config.h" + +/* + * MIDI options + */ + +/* Prevent use of disabled MIDI features in the keymap */ +//#define MIDI_ENABLE_STRICT 1 + +/* enable basic MIDI features: + - MIDI notes can be sent when in Music mode is on +*/ +#define MIDI_BASIC + +/* enable advanced MIDI features: + - MIDI notes can be added to the keymap + - Octave shift and transpose + - Virtual sustain, portamento, and modulation wheel + - etc. +*/ +//#define MIDI_ADVANCED + +/* override number of MIDI tone keycodes (each octave adds 12 keycodes and allocates 12 bytes) */ +//#define MIDI_TONE_KEYCODE_OCTAVES 2 + +#endif \ No newline at end of file diff --git a/keyboards/planck/keymaps/smt/config.h b/keyboards/planck/keymaps/smt/config.h new file mode 100644 index 0000000000..4c61581993 --- /dev/null +++ b/keyboards/planck/keymaps/smt/config.h @@ -0,0 +1,29 @@ +#ifndef CONFIG_USER_H +#define CONFIG_USER_H + +#include "../../config.h" + +/* + * MIDI options + */ + +/* Prevent use of disabled MIDI features in the keymap */ +//#define MIDI_ENABLE_STRICT 1 + +/* enable basic MIDI features: + - MIDI notes can be sent when in Music mode is on +*/ +#define MIDI_BASIC + +/* enable advanced MIDI features: + - MIDI notes can be added to the keymap + - Octave shift and transpose + - Virtual sustain, portamento, and modulation wheel + - etc. +*/ +//#define MIDI_ADVANCED + +/* override number of MIDI tone keycodes (each octave adds 12 keycodes and allocates 12 bytes) */ +//#define MIDI_TONE_KEYCODE_OCTAVES 2 + +#endif \ No newline at end of file diff --git a/keyboards/planck/keymaps/thermal_printer/config.h b/keyboards/planck/keymaps/thermal_printer/config.h index 430b6493cf..bcd0989306 100644 --- a/keyboards/planck/keymaps/thermal_printer/config.h +++ b/keyboards/planck/keymaps/thermal_printer/config.h @@ -20,4 +20,27 @@ sei(); \ } while(0) +/* + * MIDI options + */ + +/* Prevent use of disabled MIDI features in the keymap */ +//#define MIDI_ENABLE_STRICT 1 + +/* enable basic MIDI features: + - MIDI notes can be sent when in Music mode is on +*/ +#define MIDI_BASIC + +/* enable advanced MIDI features: + - MIDI notes can be added to the keymap + - Octave shift and transpose + - Virtual sustain, portamento, and modulation wheel + - etc. +*/ +//#define MIDI_ADVANCED + +/* override number of MIDI tone keycodes (each octave adds 12 keycodes and allocates 12 bytes) */ +//#define MIDI_TONE_KEYCODE_OCTAVES 2 + #endif \ No newline at end of file diff --git a/keyboards/planck/keymaps/unicode/config.h b/keyboards/planck/keymaps/unicode/config.h new file mode 100644 index 0000000000..4c61581993 --- /dev/null +++ b/keyboards/planck/keymaps/unicode/config.h @@ -0,0 +1,29 @@ +#ifndef CONFIG_USER_H +#define CONFIG_USER_H + +#include "../../config.h" + +/* + * MIDI options + */ + +/* Prevent use of disabled MIDI features in the keymap */ +//#define MIDI_ENABLE_STRICT 1 + +/* enable basic MIDI features: + - MIDI notes can be sent when in Music mode is on +*/ +#define MIDI_BASIC + +/* enable advanced MIDI features: + - MIDI notes can be added to the keymap + - Octave shift and transpose + - Virtual sustain, portamento, and modulation wheel + - etc. +*/ +//#define MIDI_ADVANCED + +/* override number of MIDI tone keycodes (each octave adds 12 keycodes and allocates 12 bytes) */ +//#define MIDI_TONE_KEYCODE_OCTAVES 2 + +#endif \ No newline at end of file diff --git a/keyboards/planck/keymaps/xyverz/config.h b/keyboards/planck/keymaps/xyverz/config.h new file mode 100644 index 0000000000..4c61581993 --- /dev/null +++ b/keyboards/planck/keymaps/xyverz/config.h @@ -0,0 +1,29 @@ +#ifndef CONFIG_USER_H +#define CONFIG_USER_H + +#include "../../config.h" + +/* + * MIDI options + */ + +/* Prevent use of disabled MIDI features in the keymap */ +//#define MIDI_ENABLE_STRICT 1 + +/* enable basic MIDI features: + - MIDI notes can be sent when in Music mode is on +*/ +#define MIDI_BASIC + +/* enable advanced MIDI features: + - MIDI notes can be added to the keymap + - Octave shift and transpose + - Virtual sustain, portamento, and modulation wheel + - etc. +*/ +//#define MIDI_ADVANCED + +/* override number of MIDI tone keycodes (each octave adds 12 keycodes and allocates 12 bytes) */ +//#define MIDI_TONE_KEYCODE_OCTAVES 2 + +#endif \ No newline at end of file diff --git a/keyboards/preonic/keymaps/CMD-Preonic/config.h b/keyboards/preonic/keymaps/CMD-Preonic/config.h new file mode 100644 index 0000000000..4c61581993 --- /dev/null +++ b/keyboards/preonic/keymaps/CMD-Preonic/config.h @@ -0,0 +1,29 @@ +#ifndef CONFIG_USER_H +#define CONFIG_USER_H + +#include "../../config.h" + +/* + * MIDI options + */ + +/* Prevent use of disabled MIDI features in the keymap */ +//#define MIDI_ENABLE_STRICT 1 + +/* enable basic MIDI features: + - MIDI notes can be sent when in Music mode is on +*/ +#define MIDI_BASIC + +/* enable advanced MIDI features: + - MIDI notes can be added to the keymap + - Octave shift and transpose + - Virtual sustain, portamento, and modulation wheel + - etc. +*/ +//#define MIDI_ADVANCED + +/* override number of MIDI tone keycodes (each octave adds 12 keycodes and allocates 12 bytes) */ +//#define MIDI_TONE_KEYCODE_OCTAVES 2 + +#endif \ No newline at end of file diff --git a/keyboards/preonic/keymaps/default/config.h b/keyboards/preonic/keymaps/default/config.h new file mode 100644 index 0000000000..4c61581993 --- /dev/null +++ b/keyboards/preonic/keymaps/default/config.h @@ -0,0 +1,29 @@ +#ifndef CONFIG_USER_H +#define CONFIG_USER_H + +#include "../../config.h" + +/* + * MIDI options + */ + +/* Prevent use of disabled MIDI features in the keymap */ +//#define MIDI_ENABLE_STRICT 1 + +/* enable basic MIDI features: + - MIDI notes can be sent when in Music mode is on +*/ +#define MIDI_BASIC + +/* enable advanced MIDI features: + - MIDI notes can be added to the keymap + - Octave shift and transpose + - Virtual sustain, portamento, and modulation wheel + - etc. +*/ +//#define MIDI_ADVANCED + +/* override number of MIDI tone keycodes (each octave adds 12 keycodes and allocates 12 bytes) */ +//#define MIDI_TONE_KEYCODE_OCTAVES 2 + +#endif \ No newline at end of file diff --git a/keyboards/preonic/keymaps/smt/config.h b/keyboards/preonic/keymaps/smt/config.h new file mode 100644 index 0000000000..4c61581993 --- /dev/null +++ b/keyboards/preonic/keymaps/smt/config.h @@ -0,0 +1,29 @@ +#ifndef CONFIG_USER_H +#define CONFIG_USER_H + +#include "../../config.h" + +/* + * MIDI options + */ + +/* Prevent use of disabled MIDI features in the keymap */ +//#define MIDI_ENABLE_STRICT 1 + +/* enable basic MIDI features: + - MIDI notes can be sent when in Music mode is on +*/ +#define MIDI_BASIC + +/* enable advanced MIDI features: + - MIDI notes can be added to the keymap + - Octave shift and transpose + - Virtual sustain, portamento, and modulation wheel + - etc. +*/ +//#define MIDI_ADVANCED + +/* override number of MIDI tone keycodes (each octave adds 12 keycodes and allocates 12 bytes) */ +//#define MIDI_TONE_KEYCODE_OCTAVES 2 + +#endif \ No newline at end of file diff --git a/keyboards/satan/keymaps/midi/config.h b/keyboards/satan/keymaps/midi/config.h index 59250b49e2..8e10b04ec2 100644 --- a/keyboards/satan/keymaps/midi/config.h +++ b/keyboards/satan/keymaps/midi/config.h @@ -7,6 +7,9 @@ * MIDI options */ +/* Prevent use of disabled MIDI features in the keymap */ +#define MIDI_ENABLE_STRICT 1 + /* enable basic MIDI features: - MIDI notes can be sent when in Music mode is on */ diff --git a/keyboards/subatomic/keymaps/default/config.h b/keyboards/subatomic/keymaps/default/config.h new file mode 100644 index 0000000000..4c61581993 --- /dev/null +++ b/keyboards/subatomic/keymaps/default/config.h @@ -0,0 +1,29 @@ +#ifndef CONFIG_USER_H +#define CONFIG_USER_H + +#include "../../config.h" + +/* + * MIDI options + */ + +/* Prevent use of disabled MIDI features in the keymap */ +//#define MIDI_ENABLE_STRICT 1 + +/* enable basic MIDI features: + - MIDI notes can be sent when in Music mode is on +*/ +#define MIDI_BASIC + +/* enable advanced MIDI features: + - MIDI notes can be added to the keymap + - Octave shift and transpose + - Virtual sustain, portamento, and modulation wheel + - etc. +*/ +//#define MIDI_ADVANCED + +/* override number of MIDI tone keycodes (each octave adds 12 keycodes and allocates 12 bytes) */ +//#define MIDI_TONE_KEYCODE_OCTAVES 2 + +#endif \ No newline at end of file diff --git a/quantum/process_keycode/process_audio.c b/quantum/process_keycode/process_audio.c index d45242c9e0..71c0297ee2 100644 --- a/quantum/process_keycode/process_audio.c +++ b/quantum/process_keycode/process_audio.c @@ -1,5 +1,5 @@ -#include "process_audio.h" #include "audio.h" +#include "process_audio.h" static float compute_freq_for_midi_note(uint8_t note) { @@ -43,7 +43,7 @@ bool process_audio(uint16_t keycode, keyrecord_t *record) { return false; } - return true + return true; } void process_audio_noteon(uint8_t note) { diff --git a/quantum/process_keycode/process_music.c b/quantum/process_keycode/process_music.c index 43bcf973e9..4b86b91f00 100644 --- a/quantum/process_keycode/process_music.c +++ b/quantum/process_keycode/process_music.c @@ -42,7 +42,7 @@ static void music_noteoff(uint8_t note) { #endif } -static void music_all_notes_off(void) { +void music_all_notes_off(void) { #ifdef AUDIO_ENABLE process_audio_stop_all_notes(); #endif diff --git a/quantum/process_keycode/process_music.h b/quantum/process_keycode/process_music.h index 69913b2761..a36514a44f 100644 --- a/quantum/process_keycode/process_music.h +++ b/quantum/process_keycode/process_music.h @@ -14,6 +14,7 @@ void music_off(void); void music_on_user(void); void music_scale_user(void); +void music_all_notes_off(void); void matrix_scan_music(void); diff --git a/quantum/quantum.c b/quantum/quantum.c index 7a27a568ac..a4a12061b3 100644 --- a/quantum/quantum.c +++ b/quantum/quantum.c @@ -95,8 +95,8 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { void reset_keyboard(void) { clear_keyboard(); -#ifdef AUDIO_ENABLE - stop_all_notes(); +#if defined(AUDIO_ENABLE) || (defined(MIDI_ENABLE) && defined(MIDI_ENABLE_BASIC)) + music_all_notes_off(); shutdown_user(); #endif wait_ms(250); diff --git a/quantum/quantum_keycodes.h b/quantum/quantum_keycodes.h index 3b82b7208c..56228f2767 100644 --- a/quantum/quantum_keycodes.h +++ b/quantum/quantum_keycodes.h @@ -1,8 +1,11 @@ - #ifndef QUANTUM_KEYCODES_H #define QUANTUM_KEYCODES_H -#if defined(MIDI_ENABLE) && defined(MIDI_ADVANCED) +#ifndef MIDI_ENABLE_STRICT +#define MIDI_ENABLE_STRICT 0 +#endif + +#if !MIDI_ENABLE_STRICT || (defined(MIDI_ENABLE) && defined(MIDI_ADVANCED)) #ifndef MIDI_TONE_KEYCODE_OCTAVES #define MIDI_TONE_KEYCODE_OCTAVES 3 #endif @@ -113,18 +116,16 @@ enum quantum_keycodes { MUV_IN, MUV_DE, -#ifdef MIDI_ENABLE // Midi - -#ifdef MIDI_BASIC +#if !MIDI_ENABLE_STRICT || (defined(MIDI_ENABLE) && defined(MIDI_BASIC)) MI_ON, // send midi notes when music mode is enabled MI_OFF, // don't send midi notes when music mode is enabled #endif -#ifdef MIDI_ADVANCED +#if !MIDI_ENABLE_STRICT || (defined(MIDI_ENABLE) && defined(MIDI_ADVANCED)) MIDI_TONE_MIN, -#if MIDI_TONE_KEYCODE_OCTAVES > 0 +#if !MIDI_ENABLE_STRICT || MIDI_TONE_KEYCODE_OCTAVES > 0 MI_C = MIDI_TONE_MIN, MI_Cs, MI_Db = MI_Cs, @@ -144,7 +145,7 @@ enum quantum_keycodes { MI_B, #endif -#if MIDI_TONE_KEYCODE_OCTAVES > 1 +#if !MIDI_ENABLE_STRICT || MIDI_TONE_KEYCODE_OCTAVES > 1 MI_C_1, MI_Cs_1, MI_Db_1 = MI_Cs_1, @@ -164,7 +165,7 @@ enum quantum_keycodes { MI_B_1, #endif -#if MIDI_TONE_KEYCODE_OCTAVES > 2 +#if !MIDI_ENABLE_STRICT || MIDI_TONE_KEYCODE_OCTAVES > 2 MI_C_2, MI_Cs_2, MI_Db_2 = MI_Cs_2, @@ -184,7 +185,7 @@ enum quantum_keycodes { MI_B_2, #endif -#if MIDI_TONE_KEYCODE_OCTAVES > 3 +#if !MIDI_ENABLE_STRICT || MIDI_TONE_KEYCODE_OCTAVES > 3 MI_C_3, MI_Cs_3, MI_Db_3 = MI_Cs_3, @@ -204,7 +205,7 @@ enum quantum_keycodes { MI_B_3, #endif -#if MIDI_TONE_KEYCODE_OCTAVES > 4 +#if !MIDI_ENABLE_STRICT || MIDI_TONE_KEYCODE_OCTAVES > 4 MI_C_4, MI_Cs_4, MI_Db_4 = MI_Cs_4, @@ -224,7 +225,7 @@ enum quantum_keycodes { MI_B_4, #endif -#if MIDI_TONE_KEYCODE_OCTAVES > 5 +#if !MIDI_ENABLE_STRICT || MIDI_TONE_KEYCODE_OCTAVES > 5 MI_C_5, MI_Cs_5, MI_Db_5 = MI_Cs_5, @@ -244,7 +245,7 @@ enum quantum_keycodes { MI_B_5, #endif -#if MIDI_TONE_KEYCODE_OCTAVES > 5 +#if !MIDI_ENABLE_STRICT || MIDI_TONE_KEYCODE_OCTAVES > 5 MIDI_TONE_MAX = MI_B_5, #elif MIDI_TONE_KEYCODE_OCTAVES > 4 MIDI_TONE_MAX = MI_B_4, @@ -339,7 +340,6 @@ enum quantum_keycodes { MI_MODSD, // decrease modulation speed MI_MODSU, // increase modulation speed #endif // MIDI_ADVANCED -#endif // MIDI_ENABLE // Backlight functionality BL_0, diff --git a/quantum/template/config.h b/quantum/template/config.h index 54db4f242f..7393097e1e 100644 --- a/quantum/template/config.h +++ b/quantum/template/config.h @@ -163,6 +163,9 @@ along with this program. If not, see . * MIDI options */ +/* Prevent use of disabled MIDI features in the keymap */ +//#define MIDI_ENABLE_STRICT 1 + /* enable basic MIDI features: - MIDI notes can be sent when in Music mode is on */ From b911e1966f6e9077df01c01d77b4e2018b582eb0 Mon Sep 17 00:00:00 2001 From: Gabriel Young Date: Sat, 25 Feb 2017 21:13:47 -0800 Subject: [PATCH 18/91] Fix redundant process_music.c in sources --- build_keyboard.mk | 38 ++++++++++++++++++++++---------------- 1 file changed, 22 insertions(+), 16 deletions(-) diff --git a/build_keyboard.mk b/build_keyboard.mk index 07dfe85b45..82464d5830 100644 --- a/build_keyboard.mk +++ b/build_keyboard.mk @@ -23,9 +23,9 @@ ifdef master MASTER = $(master) endif -ifeq ($(MASTER),right) +ifeq ($(MASTER),right) OPT_DEFS += -DMASTER_IS_ON_RIGHT -else +else ifneq ($(MASTER),left) $(error MASTER does not have a valid value(left/right)) endif @@ -38,7 +38,7 @@ KEYBOARD_C := $(KEYBOARD_PATH)/$(KEYBOARD).c ifneq ("$(wildcard $(KEYBOARD_C))","") include $(KEYBOARD_PATH)/rules.mk -else +else $(error "$(KEYBOARD_C)" does not exist) endif @@ -49,7 +49,7 @@ ifneq ($(SUBPROJECT),) ifneq ("$(wildcard $(SUBPROJECT_C))","") OPT_DEFS += -DSUBPROJECT_$(SUBPROJECT) include $(SUBPROJECT_PATH)/rules.mk - else + else $(error "$(SUBPROJECT_PATH)/$(SUBPROJECT).c" does not exist) endif endif @@ -83,7 +83,7 @@ ifneq ($(SUBPROJECT),) endif endif -# Save the defines and includes here, so we don't include any keymap specific ones +# Save the defines and includes here, so we don't include any keymap specific ones PROJECT_DEFS := $(OPT_DEFS) PROJECT_INC := $(VPATH) $(EXTRAINCDIRS) $(SUBPROJECT_PATH) $(KEYBOARD_PATH) PROJECT_CONFIG := $(CONFIG_H) @@ -139,12 +139,27 @@ ifeq ($(strip $(API_SYSEX_ENABLE)), yes) MIDI_ENABLE=yes endif +MUSIC_ENABLE := 0 + +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 + SRC += $(QUANTUM_DIR)/audio/voices.c + SRC += $(QUANTUM_DIR)/audio/luts.c +endif + ifeq ($(strip $(MIDI_ENABLE)), yes) OPT_DEFS += -DMIDI_ENABLE - SRC += $(QUANTUM_DIR)/process_keycode/process_music.c + MUSIC_ENABLE := 1 SRC += $(QUANTUM_DIR)/process_keycode/process_midi.c endif +ifeq ($(MUSIC_ENABLE), 1) + SRC += $(QUANTUM_DIR)/process_keycode/process_music.c +endif + ifeq ($(strip $(COMBO_ENABLE)), yes) OPT_DEFS += -DCOMBO_ENABLE SRC += $(QUANTUM_DIR)/process_keycode/process_combo.c @@ -154,15 +169,6 @@ ifeq ($(strip $(VIRTSER_ENABLE)), yes) OPT_DEFS += -DVIRTSER_ENABLE endif -ifeq ($(strip $(AUDIO_ENABLE)), yes) - OPT_DEFS += -DAUDIO_ENABLE - SRC += $(QUANTUM_DIR)/process_keycode/process_music.c - SRC += $(QUANTUM_DIR)/process_keycode/process_audio.c - SRC += $(QUANTUM_DIR)/audio/audio.c - SRC += $(QUANTUM_DIR)/audio/voices.c - SRC += $(QUANTUM_DIR)/audio/luts.c -endif - ifeq ($(strip $(FAUXCLICKY_ENABLE)), yes) OPT_DEFS += -DFAUXCLICKY_ENABLE SRC += $(QUANTUM_DIR)/fauxclicky.c @@ -252,7 +258,7 @@ endif OUTPUTS := $(KEYMAP_OUTPUT) $(KEYBOARD_OUTPUT) $(KEYMAP_OUTPUT)_SRC := $(SRC) -$(KEYMAP_OUTPUT)_DEFS := $(OPT_DEFS) -DQMK_KEYBOARD=\"$(KEYBOARD)\" -DQMK_KEYMAP=\"$(KEYMAP)\" +$(KEYMAP_OUTPUT)_DEFS := $(OPT_DEFS) -DQMK_KEYBOARD=\"$(KEYBOARD)\" -DQMK_KEYMAP=\"$(KEYMAP)\" $(KEYMAP_OUTPUT)_INC := $(VPATH) $(EXTRAINCDIRS) $(KEYMAP_OUTPUT)_CONFIG := $(CONFIG_H) $(KEYBOARD_OUTPUT)_SRC := $(CHIBISRC) From 976c856966841cd0be6e514c6365c73164f5b96d Mon Sep 17 00:00:00 2001 From: Gabriel Young Date: Sat, 25 Feb 2017 21:38:35 -0800 Subject: [PATCH 19/91] Update size estimates in the Makefile MIDI_ENABLE = no text data bss dec hex filename 0 17080 0 17080 42b8 satan_midi.hex MIDI_ENABLE = yes MIDI_BASIC undefined MIDI_ADVANCED undefined text data bss dec hex filename 0 19494 0 19494 4c26 satan_midi.hex +2414 bytes (vs. MIDI_ENABLE = no) MIDI_ENABLE = yes 0 20846 0 20846 516e satan_midi.hex +1352 bytes (vs. MIDI_ENABLE = yes, MIDI_BASIC off, MIDI_ADVANCED off) MIDI_ENABLE = yes #define MIDI_BASIC #define MIDI_ADVANCED text data bss dec hex filename 0 21292 0 21292 532c satan_midi.hex +1798 bytes (vs. MIDI_ENABLE = yes, MIDI_BASIC off, MIDI_ADVANCED off) Conclusion: +2400 to 4200, depending on config --- keyboards/satan/keymaps/midi/Makefile | 2 +- quantum/template/rules.mk | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/keyboards/satan/keymaps/midi/Makefile b/keyboards/satan/keymaps/midi/Makefile index 4e2d9d2f7c..89c34b3946 100644 --- a/keyboards/satan/keymaps/midi/Makefile +++ b/keyboards/satan/keymaps/midi/Makefile @@ -9,7 +9,7 @@ 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 = yes # Enable keyboard backlight functionality -MIDI_ENABLE = yes # MIDI support (+3800) +MIDI_ENABLE = yes # MIDI support (+2400 to 4200, depending on config) AUDIO_ENABLE = no # Audio output on port C6 UNICODE_ENABLE = no # Unicode BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID diff --git a/quantum/template/rules.mk b/quantum/template/rules.mk index bad3387bf4..a1f9377d87 100644 --- a/quantum/template/rules.mk +++ b/quantum/template/rules.mk @@ -61,7 +61,7 @@ SLEEP_LED_ENABLE ?= no # Breathing sleep LED during USB suspend # if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work NKRO_ENABLE ?= no # USB Nkey Rollover BACKLIGHT_ENABLE ?= no # Enable keyboard backlight functionality on B7 by default -MIDI_ENABLE ?= no # MIDI controls +MIDI_ENABLE ?= no # MIDI support (+2400 to 4200, depending on config) UNICODE_ENABLE ?= no # Unicode BLUETOOTH_ENABLE ?= no # Enable Bluetooth with the Adafruit EZ-Key HID AUDIO_ENABLE ?= no # Audio output on port C6 From d11962aeb27c73b87f8154d7f2cee747c8858d09 Mon Sep 17 00:00:00 2001 From: Gabriel Young Date: Thu, 2 Mar 2017 11:40:06 -0800 Subject: [PATCH 20/91] fix 'stop_all_notes' naming to be more consistent --- quantum/process_keycode/process_audio.c | 2 +- quantum/process_keycode/process_audio.h | 2 +- quantum/process_keycode/process_midi.c | 2 +- quantum/process_keycode/process_midi.h | 2 +- quantum/process_keycode/process_music.c | 4 ++-- quantum/template/keymaps/default/Makefile | 2 +- 6 files changed, 7 insertions(+), 7 deletions(-) diff --git a/quantum/process_keycode/process_audio.c b/quantum/process_keycode/process_audio.c index 71c0297ee2..0b6380ed39 100644 --- a/quantum/process_keycode/process_audio.c +++ b/quantum/process_keycode/process_audio.c @@ -54,7 +54,7 @@ void process_audio_noteoff(uint8_t note) { stop_note(compute_freq_for_midi_note(note)); } -void process_audio_stop_all_notes(void) { +void process_audio_all_notes_off(void) { stop_all_notes(); } diff --git a/quantum/process_keycode/process_audio.h b/quantum/process_keycode/process_audio.h index 59a17725a7..7ac15b7330 100644 --- a/quantum/process_keycode/process_audio.h +++ b/quantum/process_keycode/process_audio.h @@ -4,7 +4,7 @@ bool process_audio(uint16_t keycode, keyrecord_t *record); void process_audio_noteon(uint8_t note); void process_audio_noteoff(uint8_t note); -void process_audio_stop_all_notes(void); +void process_audio_all_notes_off(void); void audio_on_user(void); diff --git a/quantum/process_keycode/process_midi.c b/quantum/process_keycode/process_midi.c index 214bba9020..700c6ce8e6 100644 --- a/quantum/process_keycode/process_midi.c +++ b/quantum/process_keycode/process_midi.c @@ -15,7 +15,7 @@ void process_midi_basic_noteoff(uint8_t note) midi_send_noteoff(&midi_device, 0, note, 0); } -void process_midi_basic_stop_all_notes(void) +void process_midi_all_notes_off(void) { midi_send_cc(&midi_device, 0, 0x7B, 0); } diff --git a/quantum/process_keycode/process_midi.h b/quantum/process_keycode/process_midi.h index 0f559ec23a..58b7650c67 100644 --- a/quantum/process_keycode/process_midi.h +++ b/quantum/process_keycode/process_midi.h @@ -8,7 +8,7 @@ #ifdef MIDI_BASIC void process_midi_basic_noteon(uint8_t note); void process_midi_basic_noteoff(uint8_t note); -void process_midi_basic_stop_all_notes(void); +void process_midi_all_notes_off(void); #endif #ifdef MIDI_ADVANCED diff --git a/quantum/process_keycode/process_music.c b/quantum/process_keycode/process_music.c index 4b86b91f00..f89a04ee31 100644 --- a/quantum/process_keycode/process_music.c +++ b/quantum/process_keycode/process_music.c @@ -44,10 +44,10 @@ static void music_noteoff(uint8_t note) { void music_all_notes_off(void) { #ifdef AUDIO_ENABLE - process_audio_stop_all_notes(); + process_audio_all_notes_off(); #endif #if defined(MIDI_ENABLE) && defined(MIDI_BASIC) - process_midi_basic_stop_all_notes(); + process_midi_all_notes_off(); #endif } diff --git a/quantum/template/keymaps/default/Makefile b/quantum/template/keymaps/default/Makefile index 24442db37d..29f11bbc77 100644 --- a/quantum/template/keymaps/default/Makefile +++ b/quantum/template/keymaps/default/Makefile @@ -9,7 +9,7 @@ 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 -MIDI_ENABLE = no # MIDI support (+3800) +MIDI_ENABLE = no # MIDI support (+2400 to 4200, depending on config) AUDIO_ENABLE = no # Audio output on port C6 UNICODE_ENABLE = no # Unicode BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID From 0734f569409974624b40735fcd498dac9adba2d2 Mon Sep 17 00:00:00 2001 From: Gabriel Young Date: Thu, 2 Mar 2017 12:28:12 -0800 Subject: [PATCH 21/91] add debug messages to audio --- quantum/audio/audio.c | 322 +++++++++++++++++++++--------------------- 1 file changed, 164 insertions(+), 158 deletions(-) diff --git a/quantum/audio/audio.c b/quantum/audio/audio.c index 2a315fd168..e1e81fd2b8 100644 --- a/quantum/audio/audio.c +++ b/quantum/audio/audio.c @@ -89,15 +89,15 @@ void audio_init() } audio_config.raw = eeconfig_read_audio(); - // Set port PC6 (OC3A and /OC4A) as output + // Set port PC6 (OC3A and /OC4A) as output DDRC |= _BV(PORTC6); DISABLE_AUDIO_COUNTER_3_ISR; - // TCCR3A / TCCR3B: Timer/Counter #3 Control Registers - // Compare Output Mode (COM3An) = 0b00 = Normal port operation, OC3A disconnected from PC6 - // Waveform Generation Mode (WGM3n) = 0b1110 = Fast PWM Mode 14 (Period = ICR3, Duty Cycle = OCR3A) - // Clock Select (CS3n) = 0b010 = Clock / 8 + // TCCR3A / TCCR3B: Timer/Counter #3 Control Registers + // Compare Output Mode (COM3An) = 0b00 = Normal port operation, OC3A disconnected from PC6 + // Waveform Generation Mode (WGM3n) = 0b1110 = Fast PWM Mode 14 (Period = ICR3, Duty Cycle = OCR3A) + // Clock Select (CS3n) = 0b010 = Clock / 8 TCCR3A = (0 << COM3A1) | (0 << COM3A0) | (1 << WGM31) | (0 << WGM30); TCCR3B = (1 << WGM33) | (1 << WGM32) | (0 << CS32) | (1 << CS31) | (0 << CS30); @@ -106,6 +106,8 @@ void audio_init() void stop_all_notes() { + dprintf("audio stop all notes"); + if (!audio_initialized) { audio_init(); } @@ -128,6 +130,8 @@ void stop_all_notes() void stop_note(float freq) { + dprintf("audio stop note freq=%d", (int)freq); + if (playing_note) { if (!audio_initialized) { audio_init(); @@ -183,159 +187,161 @@ float vibrato(float average_freq) { ISR(TIMER3_COMPA_vect) { - float freq; - - if (playing_note) { - if (voices > 0) { - if (polyphony_rate > 0) { - if (voices > 1) { - voice_place %= voices; - if (place++ > (frequencies[voice_place] / polyphony_rate / CPU_PRESCALER)) { - voice_place = (voice_place + 1) % voices; - place = 0.0; - } - } - - #ifdef VIBRATO_ENABLE - if (vibrato_strength > 0) { - freq = vibrato(frequencies[voice_place]); - } else { - freq = frequencies[voice_place]; - } - #else - freq = frequencies[voice_place]; - #endif - } else { - if (glissando) { - if (frequency != 0 && frequency < frequencies[voices - 1] && frequency < frequencies[voices - 1] * pow(2, -440/frequencies[voices - 1]/12/2)) { - frequency = frequency * pow(2, 440/frequency/12/2); - } else if (frequency != 0 && frequency > frequencies[voices - 1] && frequency > frequencies[voices - 1] * pow(2, 440/frequencies[voices - 1]/12/2)) { - frequency = frequency * pow(2, -440/frequency/12/2); - } else { - frequency = frequencies[voices - 1]; - } - } else { - frequency = frequencies[voices - 1]; - } - - #ifdef VIBRATO_ENABLE - if (vibrato_strength > 0) { - freq = vibrato(frequency); - } else { - freq = frequency; - } - #else - freq = frequency; - #endif - } - - if (envelope_index < 65535) { - envelope_index++; - } - - freq = voice_envelope(freq); - - if (freq < 30.517578125) { - freq = 30.52; - } - - TIMER_3_PERIOD = (uint16_t)(((float)F_CPU) / (freq * CPU_PRESCALER)); - TIMER_3_DUTY_CYCLE = (uint16_t)((((float)F_CPU) / (freq * CPU_PRESCALER)) * note_timbre); - } - } - - if (playing_notes) { - if (note_frequency > 0) { - #ifdef VIBRATO_ENABLE - if (vibrato_strength > 0) { - freq = vibrato(note_frequency); - } else { - freq = note_frequency; - } - #else - freq = note_frequency; - #endif - - if (envelope_index < 65535) { - envelope_index++; - } - freq = voice_envelope(freq); - - TIMER_3_PERIOD = (uint16_t)(((float)F_CPU) / (freq * CPU_PRESCALER)); - TIMER_3_DUTY_CYCLE = (uint16_t)((((float)F_CPU) / (freq * CPU_PRESCALER)) * note_timbre); - } else { - TIMER_3_PERIOD = 0; - TIMER_3_DUTY_CYCLE = 0; - } - - note_position++; - bool end_of_note = false; - if (TIMER_3_PERIOD > 0) { - end_of_note = (note_position >= (note_length / TIMER_3_PERIOD * 0xFFFF)); - } else { - end_of_note = (note_position >= (note_length * 0x7FF)); - } - - if (end_of_note) { - current_note++; - if (current_note >= notes_count) { - if (notes_repeat) { - current_note = 0; - } else { - DISABLE_AUDIO_COUNTER_3_ISR; - DISABLE_AUDIO_COUNTER_3_OUTPUT; - playing_notes = false; - return; - } - } - if (!note_resting && (notes_rest > 0)) { - note_resting = true; - note_frequency = 0; - note_length = notes_rest; - current_note--; - } else { - note_resting = false; - envelope_index = 0; - note_frequency = (*notes_pointer)[current_note][0]; - note_length = ((*notes_pointer)[current_note][1] / 4) * (((float)note_tempo) / 100); - } - - note_position = 0; - } - } - - if (!audio_config.enable) { - playing_notes = false; - playing_note = false; - } + float freq; + + if (playing_note) { + if (voices > 0) { + if (polyphony_rate > 0) { + if (voices > 1) { + voice_place %= voices; + if (place++ > (frequencies[voice_place] / polyphony_rate / CPU_PRESCALER)) { + voice_place = (voice_place + 1) % voices; + place = 0.0; + } + } + + #ifdef VIBRATO_ENABLE + if (vibrato_strength > 0) { + freq = vibrato(frequencies[voice_place]); + } else { + freq = frequencies[voice_place]; + } + #else + freq = frequencies[voice_place]; + #endif + } else { + if (glissando) { + if (frequency != 0 && frequency < frequencies[voices - 1] && frequency < frequencies[voices - 1] * pow(2, -440/frequencies[voices - 1]/12/2)) { + frequency = frequency * pow(2, 440/frequency/12/2); + } else if (frequency != 0 && frequency > frequencies[voices - 1] && frequency > frequencies[voices - 1] * pow(2, 440/frequencies[voices - 1]/12/2)) { + frequency = frequency * pow(2, -440/frequency/12/2); + } else { + frequency = frequencies[voices - 1]; + } + } else { + frequency = frequencies[voices - 1]; + } + + #ifdef VIBRATO_ENABLE + if (vibrato_strength > 0) { + freq = vibrato(frequency); + } else { + freq = frequency; + } + #else + freq = frequency; + #endif + } + + if (envelope_index < 65535) { + envelope_index++; + } + + freq = voice_envelope(freq); + + if (freq < 30.517578125) { + freq = 30.52; + } + + TIMER_3_PERIOD = (uint16_t)(((float)F_CPU) / (freq * CPU_PRESCALER)); + TIMER_3_DUTY_CYCLE = (uint16_t)((((float)F_CPU) / (freq * CPU_PRESCALER)) * note_timbre); + } + } + + if (playing_notes) { + if (note_frequency > 0) { + #ifdef VIBRATO_ENABLE + if (vibrato_strength > 0) { + freq = vibrato(note_frequency); + } else { + freq = note_frequency; + } + #else + freq = note_frequency; + #endif + + if (envelope_index < 65535) { + envelope_index++; + } + freq = voice_envelope(freq); + + TIMER_3_PERIOD = (uint16_t)(((float)F_CPU) / (freq * CPU_PRESCALER)); + TIMER_3_DUTY_CYCLE = (uint16_t)((((float)F_CPU) / (freq * CPU_PRESCALER)) * note_timbre); + } else { + TIMER_3_PERIOD = 0; + TIMER_3_DUTY_CYCLE = 0; + } + + note_position++; + bool end_of_note = false; + if (TIMER_3_PERIOD > 0) { + end_of_note = (note_position >= (note_length / TIMER_3_PERIOD * 0xFFFF)); + } else { + end_of_note = (note_position >= (note_length * 0x7FF)); + } + + if (end_of_note) { + current_note++; + if (current_note >= notes_count) { + if (notes_repeat) { + current_note = 0; + } else { + DISABLE_AUDIO_COUNTER_3_ISR; + DISABLE_AUDIO_COUNTER_3_OUTPUT; + playing_notes = false; + return; + } + } + if (!note_resting && (notes_rest > 0)) { + note_resting = true; + note_frequency = 0; + note_length = notes_rest; + current_note--; + } else { + note_resting = false; + envelope_index = 0; + note_frequency = (*notes_pointer)[current_note][0]; + note_length = ((*notes_pointer)[current_note][1] / 4) * (((float)note_tempo) / 100); + } + + note_position = 0; + } + } + + if (!audio_config.enable) { + playing_notes = false; + playing_note = false; + } } void play_note(float freq, int vol) { + dprintf("audio play note freq=%d vol=%d", (int)freq, vol); + if (!audio_initialized) { audio_init(); } - if (audio_config.enable && voices < 8) { - DISABLE_AUDIO_COUNTER_3_ISR; + if (audio_config.enable && voices < 8) { + DISABLE_AUDIO_COUNTER_3_ISR; - // Cancel notes if notes are playing - if (playing_notes) - stop_all_notes(); + // Cancel notes if notes are playing + if (playing_notes) + stop_all_notes(); - playing_note = true; + playing_note = true; - envelope_index = 0; + envelope_index = 0; - if (freq > 0) { - frequencies[voices] = freq; - volumes[voices] = vol; - voices++; - } + if (freq > 0) { + frequencies[voices] = freq; + volumes[voices] = vol; + voices++; + } ENABLE_AUDIO_COUNTER_3_ISR; ENABLE_AUDIO_COUNTER_3_OUTPUT; - } + } } @@ -346,37 +352,37 @@ void play_notes(float (*np)[][2], uint16_t n_count, bool n_repeat, float n_rest) audio_init(); } - if (audio_config.enable) { + if (audio_config.enable) { - DISABLE_AUDIO_COUNTER_3_ISR; + DISABLE_AUDIO_COUNTER_3_ISR; - // Cancel note if a note is playing - if (playing_note) - stop_all_notes(); + // Cancel note if a note is playing + if (playing_note) + stop_all_notes(); - playing_notes = true; + playing_notes = true; - notes_pointer = np; - notes_count = n_count; - notes_repeat = n_repeat; - notes_rest = n_rest; + notes_pointer = np; + notes_count = n_count; + notes_repeat = n_repeat; + notes_rest = n_rest; - place = 0; - current_note = 0; + place = 0; + current_note = 0; note_frequency = (*notes_pointer)[current_note][0]; note_length = ((*notes_pointer)[current_note][1] / 4) * (((float)note_tempo) / 100); - note_position = 0; + note_position = 0; ENABLE_AUDIO_COUNTER_3_ISR; ENABLE_AUDIO_COUNTER_3_OUTPUT; - } + } } bool is_playing_notes(void) { - return playing_notes; + return playing_notes; } bool is_audio_on(void) { From 5ae0cfeef5134b8ba9d1f2bff0c105d4e18b064c Mon Sep 17 00:00:00 2001 From: Stephen Tudor Date: Thu, 9 Mar 2017 13:58:33 -0500 Subject: [PATCH 22/91] Add smt keymap for Satan 'GH60' --- keyboards/satan/keymaps/smt/Makefile | 21 +++ keyboards/satan/keymaps/smt/keymap.c | 204 ++++++++++++++++++++++++++ keyboards/satan/keymaps/smt/readme.md | 1 + 3 files changed, 226 insertions(+) create mode 100644 keyboards/satan/keymaps/smt/Makefile create mode 100644 keyboards/satan/keymaps/smt/keymap.c create mode 100644 keyboards/satan/keymaps/smt/readme.md diff --git a/keyboards/satan/keymaps/smt/Makefile b/keyboards/satan/keymaps/smt/Makefile new file mode 100644 index 0000000000..2a7ff27793 --- /dev/null +++ b/keyboards/satan/keymaps/smt/Makefile @@ -0,0 +1,21 @@ +# Build Options +# change to "no" to disable the options, or define them in the Makefile in +# the appropriate keymap folder that will get included automatically +# +BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000) +MOUSEKEY_ENABLE = yes # Mouse keys(+4700) +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 = yes # Enable keyboard backlight functionality +MIDI_ENABLE = no # MIDI controls +AUDIO_ENABLE = no # 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. +SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend + +ifndef QUANTUM_DIR + include ../../../../Makefile +endif diff --git a/keyboards/satan/keymaps/smt/keymap.c b/keyboards/satan/keymaps/smt/keymap.c new file mode 100644 index 0000000000..1dfa9495b8 --- /dev/null +++ b/keyboards/satan/keymaps/smt/keymap.c @@ -0,0 +1,204 @@ +#include "satan.h" + + +// Used for SHIFT_ESC +#define MODS_CTRL_MASK (MOD_BIT(KC_LSHIFT)|MOD_BIT(KC_RSHIFT)) + +// Each layer gets a name for readability, which is then used in the keymap matrix below. +// The underscores don't mean anything - you can have a layer called STUFF or any other name. +// Layer names don't all need to be of the same length, obviously, and you can also skip them +// entirely and just use numbers. +#define _QWERTY 0 +#define _COLEMAK 1 +#define _DVORAK 2 +#define _LOWER 3 +#define _RAISE 4 + +enum planck_keycodes { + QWERTY = SAFE_RANGE, + COLEMAK, + DVORAK +}; + +#define _______ KC_TRNS +#define XXXXXXX KC_NO + +// Custom macros +#define CTL_ESC CTL_T(KC_ESC) // Tap for Esc, hold for Ctrl +#define SFT_ENT SFT_T(KC_ENT) // Tap for Enter, hold for Shift +#define HPR_TAB ALL_T(KC_TAB) // Tap for Tab, hold for Hyper (Super+Ctrl+Shift+Alt) +#define ALT_GRV ALT_T(KC_GRV) // Tap for Backtick, hold for Alt + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + /* Keymap _QWERTY: (Base Layer) Default Layer + * ,-----------------------------------------------------------. + * |Esc~| 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| =|Backsp | + * |-----------------------------------------------------------| + * |Tab | Q| W| E| R| T| Y| U| I| O| P| [| ]| \ | + * |-----------------------------------------------------------| + * |CAPS | A| S| D| F| G| H| J| K| L| ;| '|Return | + * |-----------------------------------------------------------| + * |Shift | Z| X| C| V| B| N| M| ,| .| /|Shift | + * |-----------------------------------------------------------| + * |Ctrl|Gui |Alt | Space/Fn |Alt |Gui |Fn |Ctrl | + * `-----------------------------------------------------------' + */ +[_QWERTY] = KEYMAP_ANSI( + F(0), KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, \ + HPR_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC,KC_BSLS, \ + CTL_ESC, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN,KC_QUOT, KC_ENT, \ + KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM,KC_DOT, KC_SLSH, SFT_ENT, \ + KC_LCTL, KC_LGUI,KC_LALT, LT(_RAISE, KC_SPC), KC_RALT,KC_RGUI,MO(_LOWER),KC_RCTL), + + /* Keymap _COLEMAK: (Base Layer) Default Layer + * ,-----------------------------------------------------------. + * |Esc~| 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| =|Backsp | + * |-----------------------------------------------------------| + * |Tab | Q| W| F| P| G| J| L| U| Y| ;| [| ]| \ | + * |-----------------------------------------------------------| + * |CAPS | A| R| S| T| D| H| N| E| I| O| '|Return | + * |-----------------------------------------------------------| + * |Shift | Z| X| C| V| B| K| M| ,| .| /|Shift | + * |-----------------------------------------------------------| + * |Ctrl|Gui |Alt | Space/Fn |Alt |Gui |Fn |Ctrl | + * `-----------------------------------------------------------' + */ +[_COLEMAK] = KEYMAP_ANSI( + F(0), KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, \ + HPR_TAB, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN,KC_LBRC, KC_RBRC,KC_BSLS, \ + CTL_ESC, KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O ,KC_QUOT, KC_ENT, \ + KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMM,KC_DOT, KC_SLSH, SFT_ENT, \ + KC_LCTL, KC_LGUI,KC_LALT, LT(_RAISE, KC_SPC), KC_RALT,KC_RGUI,MO(_LOWER),KC_RCTL), + + /* Keymap _DVORAK: (Base Layer) Default Layer + * ,-----------------------------------------------------------. + * |Esc~| 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| [| ]|Backsp | + * |-----------------------------------------------------------| + * |HypTb| '| ,| .| P| Y| F| G| C| R| L| /| =| \ | + * |-----------------------------------------------------------| + * |CtrlEsc| A| O| E| U| I| D| H| T| N| S| -|Return | + * |-----------------------------------------------------------| + * |Shift | ;| Q| J| K| X| B| M| W| V| Z|ShiftEnter| + * |-----------------------------------------------------------| + * |Ctrl|Gui |Alt | Space/Fn |Alt |Gui |Fn |Ctrl | + * `-----------------------------------------------------------' + */ +[_DVORAK] = KEYMAP_ANSI( + F(0), KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_LBRC, KC_RBRC,KC_BSPC, \ + HPR_TAB, KC_QUOT,KC_COMM,KC_DOT, KC_P, KC_Y, KC_F, KC_G, KC_C, KC_R, KC_L, KC_SLSH, KC_EQL, KC_BSLS, \ + CTL_ESC, KC_A, KC_O, KC_E, KC_U, KC_I, KC_D, KC_H, KC_T, KC_N, KC_S, KC_MINS, KC_ENT, \ + KC_LSFT, KC_SCLN,KC_Q, KC_J, KC_K, KC_X, KC_B, KC_M, KC_W, KC_V, KC_Z, SFT_ENT, \ + KC_LCTL, KC_LGUI,KC_LALT, LT(_RAISE, KC_SPC), KC_RALT,KC_RGUI,MO(_LOWER),KC_RCTL), + + /* Keymap _LOWER: Function Layer + * ,-----------------------------------------------------------. + * | | F1| F2| F3| F4| F5| F6| F7| F8| F9|F10|F11|F12|Delete | + * |-----------------------------------------------------------| + * | |Hom| UP|End| | | | | | | |Vo-|Vo+| | + * |-----------------------------------------------------------| + * | |LFT| DN| RT| | |LFT| DN| UP| RT| |Pg+| | + * |-----------------------------------------------------------| + * | | | | | | | | | | |Pg-| | + * |-----------------------------------------------------------| + * | | |Prev| Play |Next| | | | + * `-----------------------------------------------------------' + */ +[_LOWER] = KEYMAP_ANSI( + KC_GRV ,KC_F1 ,KC_F2 ,KC_F3 ,KC_F4 ,KC_F5 ,KC_F6 ,KC_F7 ,KC_F8 ,KC_F9 ,KC_F10 ,KC_F11 ,KC_F12 ,KC_DEL, \ + _______,KC_HOME,KC_UP ,KC_END ,_______,_______,_______,_______,_______,_______,_______,KC_VOLD,KC_VOLU,_______, \ + _______,KC_LEFT,KC_DOWN,KC_RGHT,_______,_______,KC_LEFT,KC_DOWN,KC_UP ,KC_RGHT,_______,KC_PGUP ,_______, \ + _______ ,_______,_______,_______,_______,_______,_______,_______,_______,_______,KC_PGDN ,_______, \ + _______,_______,KC_MPRV ,KC_MPLY ,KC_MNXT,_______,_______,_______), + + /* Keymap _RAISE: Function Layer + * ,-----------------------------------------------------------. + * | | | | | | | | | | | | | | RESET | + * |-----------------------------------------------------------| + * | | | | | | | | | | | |BL-|BL+|BL | + * |-----------------------------------------------------------| + * | | | | | | | |QWT|CLM|DVK| | | | + * |-----------------------------------------------------------| + * | | F1|F2 | F3|F4 | F5| F6| F7| F8| | | | + * |-----------------------------------------------------------| + * | | | | | | | | | + * `-----------------------------------------------------------' + */ +[_RAISE] = KEYMAP_ANSI( + #ifdef RGBLIGHT_ENABLE + _______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,RESET , \ + _______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,BL_DEC ,BL_INC ,BL_TOGG, \ + _______,_______,_______,_______,_______,_______,_______,QWERTY ,COLEMAK,DVORAK ,_______,_______ ,_______, \ + _______ ,RGB_TOG,RGB_MOD,RGB_HUI,RGB_HUD,RGB_SAI,RGB_SAD,RGB_VAI,RGB_VAD,_______,_______ ,_______, \ + _______,_______,_______ ,_______ ,_______,_______,_______,_______ + #else + _______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,RESET , \ + _______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,BL_DEC ,BL_INC ,BL_TOGG, \ + _______,_______,_______,_______,_______,_______,_______,QWERTY ,COLEMAK,DVORAK ,_______,_______ ,_______, \ + _______ ,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______ ,_______, \ + _______,_______,_______ ,_______ ,_______,_______,XXXXXXX,_______ + #endif + ) +}; + +void persistant_default_layer_set(uint16_t default_layer) { + eeconfig_update_default_layer(default_layer); + default_layer_set(default_layer); +} + +bool process_record_user(uint16_t keycode, keyrecord_t *record) { + switch (keycode) { + case QWERTY: + if (record->event.pressed) { + persistant_default_layer_set(1UL<<_QWERTY); + } + return false; + break; + case COLEMAK: + if (record->event.pressed) { + persistant_default_layer_set(1UL<<_COLEMAK); + } + return false; + break; + case DVORAK: + if (record->event.pressed) { + persistant_default_layer_set(1UL<<_DVORAK); + } + return false; + break; + } + return true; +} + +enum function_id { + SHIFT_ESC, +}; + +const uint16_t PROGMEM fn_actions[] = { + [0] = ACTION_FUNCTION(SHIFT_ESC), +}; + +void action_function(keyrecord_t *record, uint8_t id, uint8_t opt) { + static uint8_t shift_esc_shift_mask; + switch (id) { + case SHIFT_ESC: + shift_esc_shift_mask = get_mods()&MODS_CTRL_MASK; + if (record->event.pressed) { + if (shift_esc_shift_mask) { + add_key(KC_GRV); + send_keyboard_report(); + } else { + add_key(KC_ESC); + send_keyboard_report(); + } + } else { + if (shift_esc_shift_mask) { + del_key(KC_GRV); + send_keyboard_report(); + } else { + del_key(KC_ESC); + send_keyboard_report(); + } + } + break; + } +} diff --git a/keyboards/satan/keymaps/smt/readme.md b/keyboards/satan/keymaps/smt/readme.md new file mode 100644 index 0000000000..7b706d6014 --- /dev/null +++ b/keyboards/satan/keymaps/smt/readme.md @@ -0,0 +1 @@ +# smt's Satan GH60 layout From b19e34c81e3e16dc75a39cdc94300fb116c9254c Mon Sep 17 00:00:00 2001 From: Stephen Tudor Date: Fri, 10 Mar 2017 16:10:05 -0500 Subject: [PATCH 23/91] Forsake spacefn in favor of left shift tapdance. Move media controls. --- keyboards/satan/keymaps/smt/keymap.c | 49 ++++++++++++++-------------- 1 file changed, 25 insertions(+), 24 deletions(-) diff --git a/keyboards/satan/keymaps/smt/keymap.c b/keyboards/satan/keymaps/smt/keymap.c index 1dfa9495b8..4ac016f212 100644 --- a/keyboards/satan/keymaps/smt/keymap.c +++ b/keyboards/satan/keymaps/smt/keymap.c @@ -24,10 +24,11 @@ enum planck_keycodes { #define XXXXXXX KC_NO // Custom macros +#define ALT_GRV ALT_T(KC_GRV) // Tap for Backtick, hold for Alt #define CTL_ESC CTL_T(KC_ESC) // Tap for Esc, hold for Ctrl -#define SFT_ENT SFT_T(KC_ENT) // Tap for Enter, hold for Shift #define HPR_TAB ALL_T(KC_TAB) // Tap for Tab, hold for Hyper (Super+Ctrl+Shift+Alt) -#define ALT_GRV ALT_T(KC_GRV) // Tap for Backtick, hold for Alt +#define SFT_ENT SFT_T(KC_ENT) // Tap for Enter, hold for Shift +#define SFT_RSE TD(KC_LSFT, OS(_RAISE)) // Double-tap for RAISE one-shot, otherwise Left Shift const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { /* Keymap _QWERTY: (Base Layer) Default Layer @@ -40,15 +41,15 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * |-----------------------------------------------------------| * |Shift | Z| X| C| V| B| N| M| ,| .| /|Shift | * |-----------------------------------------------------------| - * |Ctrl|Gui |Alt | Space/Fn |Alt |Gui |Fn |Ctrl | + * |Ctrl|Gui |Alt | Space |Alt |Gui |Fn |Ctrl | * `-----------------------------------------------------------' */ [_QWERTY] = KEYMAP_ANSI( F(0), KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, \ HPR_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC,KC_BSLS, \ CTL_ESC, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN,KC_QUOT, KC_ENT, \ - KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM,KC_DOT, KC_SLSH, SFT_ENT, \ - KC_LCTL, KC_LGUI,KC_LALT, LT(_RAISE, KC_SPC), KC_RALT,KC_RGUI,MO(_LOWER),KC_RCTL), + SFT_RSE, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM,KC_DOT, KC_SLSH, SFT_ENT, \ + KC_LCTL, KC_LGUI,KC_LALT, KC_SPC, KC_RALT,KC_RGUI,MO(_LOWER),KC_RCTL), /* Keymap _COLEMAK: (Base Layer) Default Layer * ,-----------------------------------------------------------. @@ -60,15 +61,15 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * |-----------------------------------------------------------| * |Shift | Z| X| C| V| B| K| M| ,| .| /|Shift | * |-----------------------------------------------------------| - * |Ctrl|Gui |Alt | Space/Fn |Alt |Gui |Fn |Ctrl | + * |Ctrl|Gui |Alt | Space |Alt |Gui |Fn |Ctrl | * `-----------------------------------------------------------' */ [_COLEMAK] = KEYMAP_ANSI( F(0), KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, \ HPR_TAB, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN,KC_LBRC, KC_RBRC,KC_BSLS, \ CTL_ESC, KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O ,KC_QUOT, KC_ENT, \ - KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMM,KC_DOT, KC_SLSH, SFT_ENT, \ - KC_LCTL, KC_LGUI,KC_LALT, LT(_RAISE, KC_SPC), KC_RALT,KC_RGUI,MO(_LOWER),KC_RCTL), + SFT_RSE, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMM,KC_DOT, KC_SLSH, SFT_ENT, \ + KC_LCTL, KC_LGUI,KC_LALT, KC_SPC, KC_RALT,KC_RGUI,MO(_LOWER),KC_RCTL), /* Keymap _DVORAK: (Base Layer) Default Layer * ,-----------------------------------------------------------. @@ -80,35 +81,35 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * |-----------------------------------------------------------| * |Shift | ;| Q| J| K| X| B| M| W| V| Z|ShiftEnter| * |-----------------------------------------------------------| - * |Ctrl|Gui |Alt | Space/Fn |Alt |Gui |Fn |Ctrl | + * |Ctrl|Gui |Alt | Space |Alt |Gui |Fn |Ctrl | * `-----------------------------------------------------------' */ [_DVORAK] = KEYMAP_ANSI( F(0), KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_LBRC, KC_RBRC,KC_BSPC, \ HPR_TAB, KC_QUOT,KC_COMM,KC_DOT, KC_P, KC_Y, KC_F, KC_G, KC_C, KC_R, KC_L, KC_SLSH, KC_EQL, KC_BSLS, \ CTL_ESC, KC_A, KC_O, KC_E, KC_U, KC_I, KC_D, KC_H, KC_T, KC_N, KC_S, KC_MINS, KC_ENT, \ - KC_LSFT, KC_SCLN,KC_Q, KC_J, KC_K, KC_X, KC_B, KC_M, KC_W, KC_V, KC_Z, SFT_ENT, \ - KC_LCTL, KC_LGUI,KC_LALT, LT(_RAISE, KC_SPC), KC_RALT,KC_RGUI,MO(_LOWER),KC_RCTL), + SFT_RSE, KC_SCLN,KC_Q, KC_J, KC_K, KC_X, KC_B, KC_M, KC_W, KC_V, KC_Z, SFT_ENT, \ + KC_LCTL, KC_LGUI,KC_LALT, KC_SPC, KC_RALT,KC_RGUI,MO(_LOWER),KC_RCTL), /* Keymap _LOWER: Function Layer * ,-----------------------------------------------------------. * | | F1| F2| F3| F4| F5| F6| F7| F8| F9|F10|F11|F12|Delete | * |-----------------------------------------------------------| - * | |Hom| UP|End| | | | | | | |Vo-|Vo+| | + * | |Hom| UP|End| | | | | | | |BL-|BL+|BL | * |-----------------------------------------------------------| - * | |LFT| DN| RT| | |LFT| DN| UP| RT| |Pg+| | + * | |LFT| DN| RT| | |LFT| DN| UP| RT|Vo+|Pg+| | * |-----------------------------------------------------------| - * | | | | | | | | | | |Pg-| | + * | | | |Prv|Ply|Nxt| | | |Vo-|Pg-| | * |-----------------------------------------------------------| - * | | |Prev| Play |Next| | | | + * | | | | | | | | | * `-----------------------------------------------------------' */ [_LOWER] = KEYMAP_ANSI( KC_GRV ,KC_F1 ,KC_F2 ,KC_F3 ,KC_F4 ,KC_F5 ,KC_F6 ,KC_F7 ,KC_F8 ,KC_F9 ,KC_F10 ,KC_F11 ,KC_F12 ,KC_DEL, \ - _______,KC_HOME,KC_UP ,KC_END ,_______,_______,_______,_______,_______,_______,_______,KC_VOLD,KC_VOLU,_______, \ - _______,KC_LEFT,KC_DOWN,KC_RGHT,_______,_______,KC_LEFT,KC_DOWN,KC_UP ,KC_RGHT,_______,KC_PGUP ,_______, \ - _______ ,_______,_______,_______,_______,_______,_______,_______,_______,_______,KC_PGDN ,_______, \ - _______,_______,KC_MPRV ,KC_MPLY ,KC_MNXT,_______,_______,_______), + _______,KC_HOME,KC_UP ,KC_END ,_______,_______,_______,_______,_______,_______,_______,BL_DEC ,BL_INC ,BL_TOGG, \ + _______,KC_LEFT,KC_DOWN,KC_RGHT,_______,_______,KC_LEFT,KC_DOWN,KC_UP ,KC_RGHT,KC_VOLU,KC_PGUP ,_______, \ + KC_LSFT ,_______,_______,KC_MPRV,KC_MPLY,KC_MNXT,_______,_______,_______,KC_VOLD,KC_PGDN ,_______, \ + _______,_______,_______ ,_______ ,_______,_______,_______,_______), /* Keymap _RAISE: Function Layer * ,-----------------------------------------------------------. @@ -126,15 +127,15 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { [_RAISE] = KEYMAP_ANSI( #ifdef RGBLIGHT_ENABLE _______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,RESET , \ - _______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,BL_DEC ,BL_INC ,BL_TOGG, \ + _______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______, \ _______,_______,_______,_______,_______,_______,_______,QWERTY ,COLEMAK,DVORAK ,_______,_______ ,_______, \ - _______ ,RGB_TOG,RGB_MOD,RGB_HUI,RGB_HUD,RGB_SAI,RGB_SAD,RGB_VAI,RGB_VAD,_______,_______ ,_______, \ - _______,_______,_______ ,_______ ,_______,_______,_______,_______ + KC_LSFT ,RGB_TOG,RGB_MOD,RGB_HUI,RGB_HUD,RGB_SAI,RGB_SAD,RGB_VAI,RGB_VAD,_______,_______ ,_______, \ + _______,_______,_______ ,_______ ,_______,_______,XXXXXXX,_______ #else _______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,RESET , \ - _______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,BL_DEC ,BL_INC ,BL_TOGG, \ + _______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______, \ _______,_______,_______,_______,_______,_______,_______,QWERTY ,COLEMAK,DVORAK ,_______,_______ ,_______, \ - _______ ,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______ ,_______, \ + KC_LSFT ,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______ ,_______, \ _______,_______,_______ ,_______ ,_______,_______,XXXXXXX,_______ #endif ) From 96bde794d8b922d71f11ec2e7eb1ba0bc0ba8d2d Mon Sep 17 00:00:00 2001 From: James Barrett Date: Sat, 11 Mar 2017 22:09:50 -0800 Subject: [PATCH 24/91] Update readme and default layout for TADA68 Add the default function layer mappings for the keyboard. Provide flashing instructions in the readme. --- .gitignore | 1 + keyboards/tada68/keymaps/default/keymap.c | 66 ++++------------------ keyboards/tada68/keymaps/default/readme.md | 2 + keyboards/tada68/readme.md | 15 ++++- 4 files changed, 26 insertions(+), 58 deletions(-) diff --git a/.gitignore b/.gitignore index f66a961fd1..6029afce4f 100644 --- a/.gitignore +++ b/.gitignore @@ -1,5 +1,6 @@ .dep *.o +*.bin *.eep *.elf *.hex diff --git a/keyboards/tada68/keymaps/default/keymap.c b/keyboards/tada68/keymaps/default/keymap.c index da57c0343b..f28116e0a5 100644 --- a/keyboards/tada68/keymaps/default/keymap.c +++ b/keyboards/tada68/keymaps/default/keymap.c @@ -1,9 +1,5 @@ #include "tada68.h" - -// Used for SHIFT_ESC -#define MODS_CTRL_MASK (MOD_BIT(KC_LSHIFT)|MOD_BIT(KC_RSHIFT)) - // Each layer gets a name for readability, which is then used in the keymap matrix below. // The underscores don't mean anything - you can have a layer called STUFF or any other name. // Layer names don't all need to be of the same length, obviously, and you can also skip them @@ -36,63 +32,21 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { /* Keymap _FL: Function Layer * ,----------------------------------------------------------------. - * | | | | | | | | | | | | | | RESET| | + * | | F1|F2 |F3 |F4 |F5 |F6 |F7 |F8 |F9 |F10|F11|F12|Del |Ins | * |----------------------------------------------------------------| - * | | | | | | | | | | | |BL-|BL+|BL | | + * | | |Up | | | | | | | | | | | |Hme | * |----------------------------------------------------------------| - * | | | | | | | | | | | | | | + * | |<- |Dn | ->| | | | | | | | | |End | * |----------------------------------------------------------------| - * | | F1|F2 | F3|F4 | F5| F6| F7| F8| | | | | | + * | | | |Bl-|BL |BL+| |VU-|VU+|MUT| |MouseL|MsU|Rck | * |----------------------------------------------------------------| - * | | | | | | | | | | | + * | | | | | | | |MsL|MsD|MsR | * `----------------------------------------------------------------' */ [_FL] = KEYMAP_ANSI( - #ifdef RGBLIGHT_ENABLE - _______, _______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,RESET,_______, \ - _______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______, BL_DEC,BL_INC, BL_TOGG,_______, \ - _______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______, _______,_______, \ - _______,RGB_TOG,RGB_MOD,RGB_HUI,RGB_HUD,RGB_SAI,RGB_SAD,RGB_VAI,RGB_VAD,_______,_______,_______,_______,_______, \ - _______,_______,_______, _______, _______,_______,_______,_______,_______, _______), - #else - _______, _______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,RESET,_______, \ - _______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______, BL_DEC,BL_INC, BL_TOGG,_______, \ - _______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______, _______,_______, \ - _______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______, \ - _______,_______,_______, _______, _______,_______,_______,_______,_______, _______), - #endif -}; - -/*enum function_id { - //SHIFT_ESC, + _______, KC_F1 ,KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL, KC_INS , \ + _______,_______,KC_UP, _______,_______,_______,_______,_______,_______,_______,_______, BL_DEC,BL_INC, BL_TOGG,KC_HOME, \ + _______,KC_LEFT,KC_DOWN,KC_RIGHT,_______,_______,_______,_______,_______,_______,_______,_______, _______,KC_END, \ + _______,_______,_______,BL_DEC, BL_TOGG,BL_INC, _______,KC_VOLD,KC_VOLU,KC_MUTE,_______,KC_BTN1, KC_MS_U, KC_BTN2, \ + _______,_______,_______, _______, _______,_______,_______,KC_MS_L,KC_MS_D, KC_MS_R), }; - -const uint16_t PROGMEM fn_actions[] = { - //[0] = ACTION_FUNCTION(SHIFT_ESC), -}; - -void action_function(keyrecord_t *record, uint8_t id, uint8_t opt) { - static uint8_t shift_esc_shift_mask; - switch (id) { - case SHIFT_ESC: - shift_esc_shift_mask = get_mods()&MODS_CTRL_MASK; - if (record->event.pressed) { - if (shift_esc_shift_mask) { - add_key(KC_GRV); - send_keyboard_report(); - } else { - add_key(KC_ESC); - send_keyboard_report(); - } - } else { - if (shift_esc_shift_mask) { - del_key(KC_GRV); - send_keyboard_report(); - } else { - del_key(KC_ESC); - send_keyboard_report(); - } - } - break; - } -}*/ diff --git a/keyboards/tada68/keymaps/default/readme.md b/keyboards/tada68/keymaps/default/readme.md index 36760d6b91..53412d7c25 100644 --- a/keyboards/tada68/keymaps/default/readme.md +++ b/keyboards/tada68/keymaps/default/readme.md @@ -1 +1,3 @@ # default TADA68 layout + +This layout replicates the default factory layout of the TADA68. diff --git a/keyboards/tada68/readme.md b/keyboards/tada68/readme.md index 552fdea529..dbe2fdca1b 100644 --- a/keyboards/tada68/readme.md +++ b/keyboards/tada68/readme.md @@ -1,4 +1,15 @@ TADA68 keyboard firmware -====================== +======================== -TODO: to be updated. +1) from the keyboards/tada68 directory run: +``` +$ make flashbin +``` + +2) hit the reset button on the TADA, the lights will start flashing. + +3) You'll see a new drive on your computer called TADA68. Backup the original factory `FLASH.BIN` file thats inside it. + +4) Delete `FLASH.BIN` from the TADA drive and copy `tada68_default.bin` that was generated at the root of the qmk directory into the TADA drive. + +5) Hit ESC on the keyboard. The lights will stop flashing and your firmware is loaded! \ No newline at end of file From cf28f7bfdaf7a2e5f8734c0936f5e48b93c9353a Mon Sep 17 00:00:00 2001 From: Dylan Khor Date: Wed, 15 Mar 2017 23:07:29 -0400 Subject: [PATCH 25/91] Add custom keycap --- keyboards/planck/keymaps/khord/keymap.c | 318 ++++++++++++++++++++++++ 1 file changed, 318 insertions(+) create mode 100644 keyboards/planck/keymaps/khord/keymap.c diff --git a/keyboards/planck/keymaps/khord/keymap.c b/keyboards/planck/keymaps/khord/keymap.c new file mode 100644 index 0000000000..478e1f8224 --- /dev/null +++ b/keyboards/planck/keymaps/khord/keymap.c @@ -0,0 +1,318 @@ +// This is the canonical layout file for the Quantum project. If you want to add another keyboard, +// this is the style you want to emulate. + +#include "planck.h" +#include "action_layer.h" +#ifdef AUDIO_ENABLE + #include "audio.h" +#endif +#include "eeconfig.h" + +extern keymap_config_t keymap_config; + +// Each layer gets a name for readability, which is then used in the keymap matrix below. +// The underscores don't mean anything - you can have a layer called STUFF or any other name. +// Layer names don't all need to be of the same length, obviously, and you can also skip them +// entirely and just use numbers. +#define _QWERTY 0 +#define _COLEMAK 1 +#define _DVORAK 2 +#define _LOWER 3 +#define _RAISE 4 +#define _PLOVER 5 +#define _ADJUST 16 + +enum planck_keycodes { + QWERTY = SAFE_RANGE, + COLEMAK, + DVORAK, + PLOVER, + LOWER, + RAISE, + BACKLIT, + EXT_PLV +}; + +// Fillers to make layering more clear +#define _______ KC_TRNS +#define XXXXXXX KC_NO + +// Dylan's additions +#define C_A_DEL LALT(LCTL(KC_DEL)) +#define C_A_INS LALT(LCTL(KC_INS)) + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + +/* Qwerty + * ,-----------------------------------------------------------------------------------. + * | Tab | Q | W | E | R | T | Y | U | I | O | P | Bksp | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | Esc | A | S | D | F | G | H | J | K | L | ; | " | + * |------+------+------+------+------+------|------+------+------+------+------+------| + * | Shift| Z | X | C | V | B | N | M | , | . | / |Enter | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | Brite| Ctrl | Alt | GUI |Lower | Space |Raise | Left | Down | Up |Right | + * `-----------------------------------------------------------------------------------' + */ +[_QWERTY] = { + {KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC}, + {KC_ESC, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT}, + {KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT }, + {BACKLIT, KC_LCTL, KC_LALT, KC_LGUI, LOWER, KC_SPC, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT} +}, + +/* Colemak + * ,-----------------------------------------------------------------------------------. + * | Tab | Q | W | F | P | G | J | L | U | Y | ; | Bksp | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | Esc | A | R | S | T | D | H | N | E | I | O | " | + * |------+------+------+------+------+------|------+------+------+------+------+------| + * | Shift| Z | X | C | V | B | K | M | , | . | / |Enter | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | Brite| Ctrl | Alt | GUI |Lower | Space |Raise | Left | Down | Up |Right | + * `-----------------------------------------------------------------------------------' + */ +[_COLEMAK] = { + {KC_TAB, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_BSPC}, + {KC_ESC, KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O, KC_QUOT}, + {KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT }, + {BACKLIT, KC_LCTL, KC_LALT, KC_LGUI, LOWER, KC_SPC, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT} +}, + +/* Dvorak + * ,-----------------------------------------------------------------------------------. + * | Tab | " | , | . | P | Y | F | G | C | R | L | Bksp | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | Esc | A | O | E | U | I | D | H | T | N | S | / | + * |------+------+------+------+------+------|------+------+------+------+------+------| + * | Shift| ; | Q | J | K | X | B | M | W | V | Z |Enter | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | Brite| Ctrl | Alt | GUI |Lower | Space |Raise | Left | Down | Up |Right | + * `-----------------------------------------------------------------------------------' + */ +[_DVORAK] = { + {KC_TAB, KC_QUOT, KC_COMM, KC_DOT, KC_P, KC_Y, KC_F, KC_G, KC_C, KC_R, KC_L, KC_BSPC}, + {KC_ESC, KC_A, KC_O, KC_E, KC_U, KC_I, KC_D, KC_H, KC_T, KC_N, KC_S, KC_SLSH}, + {KC_LSFT, KC_SCLN, KC_Q, KC_J, KC_K, KC_X, KC_B, KC_M, KC_W, KC_V, KC_Z, KC_ENT }, + {BACKLIT, KC_LCTL, KC_LALT, KC_LGUI, LOWER, KC_SPC, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT} +}, + +/* Lower + * ,-----------------------------------------------------------------------------------. + * | ~ | ! | @ | # | $ | % | ^ | & | * | ( | ) | Bksp | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | Del | F1 | F2 | F3 | F4 | F5 | F6 | _ | + | { | } | | | + * |------+------+------+------+------+------|------+------+------+------+------+------| + * | | F7 | F8 | F9 | F10 | F11 | F12 |ISO ~ |ISO | | | |Enter | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | | | | | | | | Next | Vol- | Vol+ | Play | + * `-----------------------------------------------------------------------------------' + */ +[_LOWER] = { + {KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_BSPC}, + {KC_DEL, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE}, + {_______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12,S(KC_NUHS),S(KC_NUBS),_______, _______, _______}, + {_______, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY} +}, + +/* Raise + * ,-----------------------------------------------------------------------------------. + * | ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Bksp | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | Del | F1 | F2 | F3 | F4 | F5 | F6 | - | = | [ | ] | \ | + * |------+------+------+------+------+------|------+------+------+------+------+------| + * | | F7 | F8 | F9 | F10 | F11 | F12 |ISO # |ISO / | | |Enter | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | | | | | | | | Next | Vol- | Vol+ | Play | + * `-----------------------------------------------------------------------------------' + */ +[_RAISE] = { + {KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC}, + {KC_DEL, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS}, + {_______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_NUHS, KC_NUBS, _______, _______, _______}, + {_______, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY} +}, + +/* Plover layer (http://opensteno.org) + * ,-----------------------------------------------------------------------------------. + * | # | # | # | # | # | # | # | # | # | # | # | # | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | | S | T | P | H | * | * | F | P | L | T | D | + * |------+------+------+------+------+------|------+------+------+------+------+------| + * |TogOut| S | K | W | R | * | * | R | B | G | S | Z | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | Exit | | | A | O | | E | U | | | | + * `-----------------------------------------------------------------------------------' + */ + +[_PLOVER] = { + {KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1 }, + {XXXXXXX, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC}, + {XXXXXXX, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT}, + {EXT_PLV, XXXXXXX, XXXXXXX, KC_C, KC_V, XXXXXXX, XXXXXXX, KC_N, KC_M, XXXXXXX, XXXXXXX, XXXXXXX} +}, + +/* Adjust (Lower + Raise) + * ,-----------------------------------------------------------------------------------. + * | | Reset| | | | | | | | | | Del | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | | | |Aud on|Audoff|AGnorm|AGswap|Qwerty|Colemk|Dvorak|Plover| | + * |------+------+------+------+------+------|------+------+------+------+------+------| + * | |Voice-|Voice+|Mus on|Musoff|MIDIon|MIDIof| | | | | | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | | | | | | | | | | | | + * `-----------------------------------------------------------------------------------' + */ +[_ADJUST] = { + {_______, RESET, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_DEL}, + {_______, _______, _______, AU_ON, AU_OFF, AG_NORM, AG_SWAP, QWERTY, COLEMAK, DVORAK, PLOVER, _______}, + {_______, MUV_DE, MUV_IN, MU_ON, MU_OFF, MI_ON, MI_OFF, _______, _______, _______, _______, _______}, + {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, C_A_INS, C_A_DEL} +} + + +}; + +#ifdef AUDIO_ENABLE + +float tone_startup[][2] = SONG(SONIC_RING); //plug in +float tone_qwerty[][2] = SONG(QWERTY_SOUND); +float tone_dvorak[][2] = SONG(DVORAK_SOUND); +float tone_colemak[][2] = SONG(COLEMAK_SOUND); +float tone_plover[][2] = SONG(PLOVER_SOUND); +float tone_plover_gb[][2] = SONG(PLOVER_GOODBYE_SOUND); +float music_scale[][2] = SONG(ZELDA_PUZZLE); //music mode + +float tone_goodbye[][2] = SONG(GOODBYE_SOUND); +#endif + + +void persistant_default_layer_set(uint16_t default_layer) { + eeconfig_update_default_layer(default_layer); + default_layer_set(default_layer); +} + +bool process_record_user(uint16_t keycode, keyrecord_t *record) { + switch (keycode) { + case QWERTY: + if (record->event.pressed) { + #ifdef AUDIO_ENABLE + PLAY_NOTE_ARRAY(tone_qwerty, false, 0); + #endif + persistant_default_layer_set(1UL<<_QWERTY); + } + return false; + break; + case COLEMAK: + if (record->event.pressed) { + #ifdef AUDIO_ENABLE + PLAY_NOTE_ARRAY(tone_colemak, false, 0); + #endif + persistant_default_layer_set(1UL<<_COLEMAK); + } + return false; + break; + case DVORAK: + if (record->event.pressed) { + #ifdef AUDIO_ENABLE + PLAY_NOTE_ARRAY(tone_dvorak, false, 0); + #endif + persistant_default_layer_set(1UL<<_DVORAK); + } + return false; + break; + case LOWER: + if (record->event.pressed) { + layer_on(_LOWER); + update_tri_layer(_LOWER, _RAISE, _ADJUST); + } else { + layer_off(_LOWER); + update_tri_layer(_LOWER, _RAISE, _ADJUST); + } + return false; + break; + case RAISE: + if (record->event.pressed) { + layer_on(_RAISE); + update_tri_layer(_LOWER, _RAISE, _ADJUST); + } else { + layer_off(_RAISE); + update_tri_layer(_LOWER, _RAISE, _ADJUST); + } + return false; + break; + case BACKLIT: + if (record->event.pressed) { + register_code(KC_RSFT); + #ifdef BACKLIGHT_ENABLE + backlight_step(); + #endif + } else { + unregister_code(KC_RSFT); + } + return false; + break; + case PLOVER: + if (record->event.pressed) { + #ifdef AUDIO_ENABLE + stop_all_notes(); + PLAY_NOTE_ARRAY(tone_plover, false, 0); + #endif + layer_off(_RAISE); + layer_off(_LOWER); + layer_off(_ADJUST); + layer_on(_PLOVER); + if (!eeconfig_is_enabled()) { + eeconfig_init(); + } + keymap_config.raw = eeconfig_read_keymap(); + keymap_config.nkro = 1; + eeconfig_update_keymap(keymap_config.raw); + } + return false; + break; + case EXT_PLV: + if (record->event.pressed) { + #ifdef AUDIO_ENABLE + PLAY_NOTE_ARRAY(tone_plover_gb, false, 0); + #endif + layer_off(_PLOVER); + } + return false; + break; + } + return true; +} + +void matrix_init_user(void) { + #ifdef AUDIO_ENABLE + startup_user(); + #endif +} + +#ifdef AUDIO_ENABLE + +void startup_user() +{ + _delay_ms(20); // gets rid of tick + PLAY_NOTE_ARRAY(tone_startup, false, 0); +} + +void shutdown_user() +{ + PLAY_NOTE_ARRAY(tone_goodbye, false, 0); + _delay_ms(150); + stop_all_notes(); +} + +void music_on_user(void) +{ + music_scale_user(); +} + +void music_scale_user(void) +{ + PLAY_NOTE_ARRAY(music_scale, false, 0); +} + +#endif From 73a70a2c1c78a140ac506bbe8b91ff4a7eb70da4 Mon Sep 17 00:00:00 2001 From: Dylan Khor Date: Wed, 15 Mar 2017 23:09:17 -0400 Subject: [PATCH 26/91] Add Makefile --- keyboards/planck/keymaps/khord/Makefile | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 keyboards/planck/keymaps/khord/Makefile diff --git a/keyboards/planck/keymaps/khord/Makefile b/keyboards/planck/keymaps/khord/Makefile new file mode 100644 index 0000000000..457a3d01d4 --- /dev/null +++ b/keyboards/planck/keymaps/khord/Makefile @@ -0,0 +1,3 @@ +ifndef QUANTUM_DIR + include ../../../../Makefile +endif From 0c0a8ee187eb27faefe4391d978283a081896399 Mon Sep 17 00:00:00 2001 From: Dylan Khor Date: Thu, 16 Mar 2017 03:46:26 +0000 Subject: [PATCH 27/91] test --- keyboards/planck/keymaps/khord/keymap.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/keyboards/planck/keymaps/khord/keymap.c b/keyboards/planck/keymaps/khord/keymap.c index 478e1f8224..e6c90c26d0 100644 --- a/keyboards/planck/keymaps/khord/keymap.c +++ b/keyboards/planck/keymaps/khord/keymap.c @@ -57,7 +57,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { [_QWERTY] = { {KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC}, {KC_ESC, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT}, - {KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT }, + {KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, SFT_T(KC_ENT) }, {BACKLIT, KC_LCTL, KC_LALT, KC_LGUI, LOWER, KC_SPC, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT} }, From 683754bce806c634f59dd9d926491952778f913b Mon Sep 17 00:00:00 2001 From: Dylan Khor Date: Thu, 16 Mar 2017 04:11:47 +0000 Subject: [PATCH 28/91] added custom tones --- quantum/audio/song_list.h | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/quantum/audio/song_list.h b/quantum/audio/song_list.h index 8022ca6729..400915db91 100644 --- a/quantum/audio/song_list.h +++ b/quantum/audio/song_list.h @@ -122,4 +122,31 @@ E__NOTE(_E5), \ E__NOTE(_D5), +#define COIN_SOUND \ + E__NOTE(_A5 ), \ + HD_NOTE(_E6 ), + +#define ONE_UP_SOUND \ + Q__NOTE(_E6 ), \ + Q__NOTE(_G6 ), \ + Q__NOTE(_E7 ), \ + Q__NOTE(_C7 ), \ + Q__NOTE(_D7 ), \ + Q__NOTE(_G7 ), + +#define SONIC_RING \ + E__NOTE(_E6), \ + E__NOTE(_G6), \ + HD_NOTE(_C7), + +#define ZELDA_PUZZLE \ + Q__NOTE(_G5), \ + Q__NOTE(_FS5), \ + Q__NOTE(_DS5), \ + Q__NOTE(_A4), \ + Q__NOTE(_GS4), \ + Q__NOTE(_E5), \ + Q__NOTE(_GS5), \ + HD_NOTE(_C6), + #endif From 24d174595120aa6874604eed41db7ae02b26c9be Mon Sep 17 00:00:00 2001 From: Dylan Khor Date: Thu, 16 Mar 2017 12:24:31 -0400 Subject: [PATCH 29/91] add config.h for customization --- keyboards/planck/keymaps/khord/config.h | 90 +++++++++++++++++++++++++ 1 file changed, 90 insertions(+) create mode 100644 keyboards/planck/keymaps/khord/config.h diff --git a/keyboards/planck/keymaps/khord/config.h b/keyboards/planck/keymaps/khord/config.h new file mode 100644 index 0000000000..5cf96bb88c --- /dev/null +++ b/keyboards/planck/keymaps/khord/config.h @@ -0,0 +1,90 @@ +/* +Copyright 2012 Jun Wako + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 2 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see . +*/ + +#ifndef CONFIG_H +#define CONFIG_H + +#include "config_common.h" + +/* USB Device descriptor parameter */ +#define VENDOR_ID 0xFEED +#define PRODUCT_ID 0x6060 +#define MANUFACTURER Ortholinear Keyboards +#define PRODUCT The Planck Keyboard +#define DESCRIPTION A compact ortholinear keyboard + +/* key matrix size */ +#define MATRIX_ROWS 4 +#define MATRIX_COLS 12 + +/* Planck PCB default pin-out */ +#define MATRIX_ROW_PINS { D0, D5, B5, B6 } +#define MATRIX_COL_PINS { F1, F0, B0, C7, F4, F5, F6, F7, D4, D6, B4, D7 } +#define UNUSED_PINS + +#define AUDIO_VOICES + +#define BACKLIGHT_PIN B7 + +/* COL2ROW or ROW2COL */ +#define DIODE_DIRECTION COL2ROW + +/* define if matrix has ghost */ +//#define MATRIX_HAS_GHOST + +/* number of backlight levels */ +#define BACKLIGHT_LEVELS 3 + +/* Set 0 if debouncing isn't needed */ +#define DEBOUNCING_DELAY 5 + +/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */ +#define LOCKING_SUPPORT_ENABLE +/* Locking resynchronize hack */ +#define LOCKING_RESYNC_ENABLE + +/* key combination for command */ +#define IS_COMMAND() ( \ + keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \ +) + +/* + * Feature disable options + * These options are also useful to firmware size reduction. + */ + +/* disable debug print */ +//#define NO_DEBUG + +/* disable print */ +//#define NO_PRINT + +/* disable action features */ +//#define NO_ACTION_LAYER +//#define NO_ACTION_TAPPING +//#define NO_ACTION_ONESHOT +//#define NO_ACTION_MACRO +//#define NO_ACTION_FUNCTION + +#ifdef SUBPROJECT_rev3 + #include "rev3/config.h" +#endif +#ifdef SUBPROJECT_rev4 + #include "rev4/config.h" +#endif + +#endif From 0c8f71e3c7fe258e6e084d7eec018b89a499d014 Mon Sep 17 00:00:00 2001 From: Dylan Khor Date: Thu, 16 Mar 2017 12:44:56 -0400 Subject: [PATCH 30/91] test tap dance --- keyboards/planck/keymaps/khord/Makefile | 1 + keyboards/planck/keymaps/khord/config.h | 3 +++ keyboards/planck/keymaps/khord/keymap.c | 14 +++++++++++++- 3 files changed, 17 insertions(+), 1 deletion(-) diff --git a/keyboards/planck/keymaps/khord/Makefile b/keyboards/planck/keymaps/khord/Makefile index 457a3d01d4..666161d1ff 100644 --- a/keyboards/planck/keymaps/khord/Makefile +++ b/keyboards/planck/keymaps/khord/Makefile @@ -1,3 +1,4 @@ ifndef QUANTUM_DIR include ../../../../Makefile endif +TAP_DANCE_ENABLE = yes diff --git a/keyboards/planck/keymaps/khord/config.h b/keyboards/planck/keymaps/khord/config.h index 5cf96bb88c..76a1f88322 100644 --- a/keyboards/planck/keymaps/khord/config.h +++ b/keyboards/planck/keymaps/khord/config.h @@ -62,6 +62,9 @@ along with this program. If not, see . keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \ ) +/* Tap Dance */ +#define TAPPING_TERM 200 + /* * Feature disable options * These options are also useful to firmware size reduction. diff --git a/keyboards/planck/keymaps/khord/keymap.c b/keyboards/planck/keymaps/khord/keymap.c index e6c90c26d0..04b95c7447 100644 --- a/keyboards/planck/keymaps/khord/keymap.c +++ b/keyboards/planck/keymaps/khord/keymap.c @@ -33,6 +33,18 @@ enum planck_keycodes { EXT_PLV }; +// Tap Dance Declarations +enum { + TD_ESC_CAPS = 0 +}; + +// Tap Dance Definitions +qk_tap_dance_action_t tape_dance_actions[] = { + //Tap once for Esc, twice for Caps Lock + [TD_ESC_CAPS] = ACTION_TAP_DANCE_DOUBLE(KC_ESC, KC_CAPS) + // Other declarations would go here, separated by commas, if you have them +}; + // Fillers to make layering more clear #define _______ KC_TRNS #define XXXXXXX KC_NO @@ -56,7 +68,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { */ [_QWERTY] = { {KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC}, - {KC_ESC, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT}, + {TD(TD_ESC_CAPS), KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT}, {KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, SFT_T(KC_ENT) }, {BACKLIT, KC_LCTL, KC_LALT, KC_LGUI, LOWER, KC_SPC, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT} }, From 6ca1c49d38ddc31c5fc9ef1c180849804fe358fd Mon Sep 17 00:00:00 2001 From: Dylan Khor Date: Thu, 16 Mar 2017 13:07:01 -0400 Subject: [PATCH 31/91] test fixes for tap dane --- keyboards/planck/keymaps/khord/config.h | 2 +- keyboards/planck/keymaps/khord/keymap.c | 21 ++++++++++----------- 2 files changed, 11 insertions(+), 12 deletions(-) diff --git a/keyboards/planck/keymaps/khord/config.h b/keyboards/planck/keymaps/khord/config.h index 76a1f88322..008f3a5c2c 100644 --- a/keyboards/planck/keymaps/khord/config.h +++ b/keyboards/planck/keymaps/khord/config.h @@ -63,7 +63,7 @@ along with this program. If not, see . ) /* Tap Dance */ -#define TAPPING_TERM 200 +#define TAPPING_TERM 150 /* * Feature disable options diff --git a/keyboards/planck/keymaps/khord/keymap.c b/keyboards/planck/keymaps/khord/keymap.c index 04b95c7447..50a5daa577 100644 --- a/keyboards/planck/keymaps/khord/keymap.c +++ b/keyboards/planck/keymaps/khord/keymap.c @@ -33,22 +33,15 @@ enum planck_keycodes { EXT_PLV }; +// Fillers to make layering more clear +#define _______ KC_TRNS +#define XXXXXXX KC_NO + // Tap Dance Declarations enum { TD_ESC_CAPS = 0 }; -// Tap Dance Definitions -qk_tap_dance_action_t tape_dance_actions[] = { - //Tap once for Esc, twice for Caps Lock - [TD_ESC_CAPS] = ACTION_TAP_DANCE_DOUBLE(KC_ESC, KC_CAPS) - // Other declarations would go here, separated by commas, if you have them -}; - -// Fillers to make layering more clear -#define _______ KC_TRNS -#define XXXXXXX KC_NO - // Dylan's additions #define C_A_DEL LALT(LCTL(KC_DEL)) #define C_A_INS LALT(LCTL(KC_INS)) @@ -328,3 +321,9 @@ void music_scale_user(void) } #endif + +// Tap Dance Definitions +const qk_tap_dance_action_t tape_dance_actions[] = { + //Tap once for Esc, twice for Caps Lock + [TD_ESC_CAPS] = ACTION_TAP_DANCE_DOUBLE(KC_ESC, KC_CAPS) +}; From c7cddfc539f111baeff51a2f7e6272701e0f0109 Mon Sep 17 00:00:00 2001 From: Dylan Khor Date: Thu, 16 Mar 2017 13:27:26 -0400 Subject: [PATCH 32/91] test td changes --- keyboards/planck/keymaps/khord/Makefile | 2 +- keyboards/planck/keymaps/khord/keymap.c | 11 +++++------ 2 files changed, 6 insertions(+), 7 deletions(-) diff --git a/keyboards/planck/keymaps/khord/Makefile b/keyboards/planck/keymaps/khord/Makefile index 666161d1ff..f0ed9e8dcc 100644 --- a/keyboards/planck/keymaps/khord/Makefile +++ b/keyboards/planck/keymaps/khord/Makefile @@ -1,4 +1,4 @@ +TAP_DANCE_ENABLE = yes ifndef QUANTUM_DIR include ../../../../Makefile endif -TAP_DANCE_ENABLE = yes diff --git a/keyboards/planck/keymaps/khord/keymap.c b/keyboards/planck/keymaps/khord/keymap.c index 50a5daa577..52467641a3 100644 --- a/keyboards/planck/keymaps/khord/keymap.c +++ b/keyboards/planck/keymaps/khord/keymap.c @@ -178,6 +178,11 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { }; + +const qk_tap_dance_action_t tape_dance_actions[] = { + [TD_ESC_CAPS] = ACTION_TAP_DANCE_DOUBLE(KC_ESC, KC_CAPS) +}; + #ifdef AUDIO_ENABLE float tone_startup[][2] = SONG(SONIC_RING); //plug in @@ -321,9 +326,3 @@ void music_scale_user(void) } #endif - -// Tap Dance Definitions -const qk_tap_dance_action_t tape_dance_actions[] = { - //Tap once for Esc, twice for Caps Lock - [TD_ESC_CAPS] = ACTION_TAP_DANCE_DOUBLE(KC_ESC, KC_CAPS) -}; From 4b1d0c585977884faac28f1e7210bf528af46c9a Mon Sep 17 00:00:00 2001 From: Dylan Khor Date: Thu, 16 Mar 2017 17:36:31 +0000 Subject: [PATCH 33/91] remove const --- keyboards/planck/keymaps/khord/keymap.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/keyboards/planck/keymaps/khord/keymap.c b/keyboards/planck/keymaps/khord/keymap.c index 52467641a3..64185a1488 100644 --- a/keyboards/planck/keymaps/khord/keymap.c +++ b/keyboards/planck/keymaps/khord/keymap.c @@ -179,7 +179,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { }; -const qk_tap_dance_action_t tape_dance_actions[] = { +qk_tap_dance_action_t tape_dance_actions[] = { [TD_ESC_CAPS] = ACTION_TAP_DANCE_DOUBLE(KC_ESC, KC_CAPS) }; From e03ddbe118740493a7adc59539c7edb47a98c799 Mon Sep 17 00:00:00 2001 From: Dylan Khor Date: Thu, 16 Mar 2017 18:13:53 +0000 Subject: [PATCH 34/91] tap dance working for esc and arrows --- keyboards/planck/keymaps/khord/keymap.c | 22 +++++++++++++++------- 1 file changed, 15 insertions(+), 7 deletions(-) diff --git a/keyboards/planck/keymaps/khord/keymap.c b/keyboards/planck/keymaps/khord/keymap.c index 64185a1488..6f19966f25 100644 --- a/keyboards/planck/keymaps/khord/keymap.c +++ b/keyboards/planck/keymaps/khord/keymap.c @@ -39,7 +39,11 @@ enum planck_keycodes { // Tap Dance Declarations enum { - TD_ESC_CAPS = 0 + ESC_CAP = 0, + LFT_HOM, + DWN_PDN, + UPP_PUP, + RGT_END }; // Dylan's additions @@ -60,10 +64,10 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * `-----------------------------------------------------------------------------------' */ [_QWERTY] = { - {KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC}, - {TD(TD_ESC_CAPS), KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT}, - {KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, SFT_T(KC_ENT) }, - {BACKLIT, KC_LCTL, KC_LALT, KC_LGUI, LOWER, KC_SPC, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT} + {KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC }, + {TD(ESC_CAP), KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT }, + {KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, SFT_T(KC_ENT)}, + {BACKLIT, KC_LCTL, KC_LALT, KC_LGUI, LOWER, KC_SPC, KC_SPC, RAISE, TD(LFT_HOM), TD(DWN_PDN), TD(UPP_PUP), TD(RGT_END) } }, /* Colemak @@ -179,8 +183,12 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { }; -qk_tap_dance_action_t tape_dance_actions[] = { - [TD_ESC_CAPS] = ACTION_TAP_DANCE_DOUBLE(KC_ESC, KC_CAPS) +qk_tap_dance_action_t tap_dance_actions[] = { + [ESC_CAP] = ACTION_TAP_DANCE_DOUBLE(KC_ESC, KC_CAPS), + [LFT_HOM] = ACTION_TAP_DANCE_DOUBLE(KC_LEFT, KC_HOME), + [DWN_PDN] = ACTION_TAP_DANCE_DOUBLE(KC_DOWN, KC_PGDN), + [UPP_PUP] = ACTION_TAP_DANCE_DOUBLE(KC_UP, KC_PGUP), + [RGT_END] = ACTION_TAP_DANCE_DOUBLE(KC_RGHT, KC_END) }; #ifdef AUDIO_ENABLE From e123ed8d5f4837a424d8ad58bd8664a323a76f9b Mon Sep 17 00:00:00 2001 From: jprmesh Date: Wed, 15 Mar 2017 13:48:31 -0700 Subject: [PATCH 35/91] Added KC_KEYMAP macro for old style keymaps in Atreus62 --- keyboards/atreus62/atreus62.h | 38 +++++++++++++++++++++++++---------- 1 file changed, 27 insertions(+), 11 deletions(-) diff --git a/keyboards/atreus62/atreus62.h b/keyboards/atreus62/atreus62.h index eacf5b4513..ca5cda8a89 100644 --- a/keyboards/atreus62/atreus62.h +++ b/keyboards/atreus62/atreus62.h @@ -9,18 +9,34 @@ void promicro_bootloader_jmp(bool program); // The first section contains all of the arguements // The second converts the arguments into a two-dimensional array #define KEYMAP( \ - k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, \ - k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, \ - k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, \ - k30, k31, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, \ - k40, k41, k42, k43, k44, k45, k46, k47, k48, k49, k4a, k4b, k4c, k4d \ + k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, \ + k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, \ + k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, \ + k30, k31, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, \ + k40, k41, k42, k43, k44, k45, k46, k47, k48, k49, k4a, k4b, k4c, k4d \ ) \ { \ - { k00, k01, k02, k03, k04, k05, KC_NO, k06, k07, k08, k09, k0a, k0b }, \ - { k10, k11, k12, k13, k14, k15, KC_NO, k16, k17, k18, k19, k1a, k1b }, \ - { k20, k21, k22, k23, k24, k25, KC_NO, k26, k27, k28, k29, k2a, k2b }, \ - { k30, k31, k32, k33, k34, k35, k46, k36, k37, k38, k39, k3a, k3b }, \ - { k40, k41, k42, k43, k44, k45, k47, k48, k49, k4a, k4b, k4c, k4d } \ + { k00, k01, k02, k03, k04, k05, KC_NO, k06, k07, k08, k09, k0a, k0b }, \ + { k10, k11, k12, k13, k14, k15, KC_NO, k16, k17, k18, k19, k1a, k1b }, \ + { k20, k21, k22, k23, k24, k25, KC_NO, k26, k27, k28, k29, k2a, k2b }, \ + { k30, k31, k32, k33, k34, k35, k46, k36, k37, k38, k39, k3a, k3b }, \ + { k40, k41, k42, k43, k44, k45, k47, k48, k49, k4a, k4b, k4c, k4d } \ } -#endif \ No newline at end of file +// Used to create a keymap using only KC_ prefixed keys. +#define KC_KEYMAP( \ + k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, \ + k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, \ + k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, \ + k30, k31, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, \ + k40, k41, k42, k43, k44, k45, k46, k47, k48, k49, k4a, k4b, k4c, k4d \ +) \ +{ \ + { KC_##k00, KC_##k01, KC_##k02, KC_##k03, KC_##k04, KC_##k05, KC_NO, KC_##k06, KC_##k07, KC_##k08, KC_##k09, KC_##k0a, KC_##k0b }, \ + { KC_##k10, KC_##k11, KC_##k12, KC_##k13, KC_##k14, KC_##k15, KC_NO, KC_##k16, KC_##k17, KC_##k18, KC_##k19, KC_##k1a, KC_##k1b }, \ + { KC_##k20, KC_##k21, KC_##k22, KC_##k23, KC_##k24, KC_##k25, KC_NO, KC_##k26, KC_##k27, KC_##k28, KC_##k29, KC_##k2a, KC_##k2b }, \ + { KC_##k30, KC_##k31, KC_##k32, KC_##k33, KC_##k34, KC_##k35, KC_##k46, KC_##k36, KC_##k37, KC_##k38, KC_##k39, KC_##k3a, KC_##k3b }, \ + { KC_##k40, KC_##k41, KC_##k42, KC_##k43, KC_##k44, KC_##k45, KC_##k47, KC_##k48, KC_##k49, KC_##k4a, KC_##k4b, KC_##k4c, KC_##k4d } \ +} + +#endif From 3766f902a02da7e9355685c733f70bcff9fe5a12 Mon Sep 17 00:00:00 2001 From: Gabriel Young Date: Sat, 18 Mar 2017 15:38:03 -0700 Subject: [PATCH 36/91] boilerplate project created with new_project.sh --- keyboards/frosty_flake/Makefile | 3 + keyboards/frosty_flake/config.h | 162 ++++++++++++++++++ keyboards/frosty_flake/frosty_flake.c | 28 +++ keyboards/frosty_flake/frosty_flake.h | 19 ++ .../frosty_flake/keymaps/default/Makefile | 21 +++ .../frosty_flake/keymaps/default/config.h | 8 + .../frosty_flake/keymaps/default/keymap.c | 44 +++++ .../frosty_flake/keymaps/default/readme.md | 1 + keyboards/frosty_flake/readme.md | 28 +++ keyboards/frosty_flake/rules.mk | 68 ++++++++ 10 files changed, 382 insertions(+) create mode 100644 keyboards/frosty_flake/Makefile create mode 100644 keyboards/frosty_flake/config.h create mode 100644 keyboards/frosty_flake/frosty_flake.c create mode 100644 keyboards/frosty_flake/frosty_flake.h create mode 100644 keyboards/frosty_flake/keymaps/default/Makefile create mode 100644 keyboards/frosty_flake/keymaps/default/config.h create mode 100644 keyboards/frosty_flake/keymaps/default/keymap.c create mode 100644 keyboards/frosty_flake/keymaps/default/readme.md create mode 100644 keyboards/frosty_flake/readme.md create mode 100644 keyboards/frosty_flake/rules.mk diff --git a/keyboards/frosty_flake/Makefile b/keyboards/frosty_flake/Makefile new file mode 100644 index 0000000000..57b2ef62e5 --- /dev/null +++ b/keyboards/frosty_flake/Makefile @@ -0,0 +1,3 @@ +ifndef MAKEFILE_INCLUDED + include ../../Makefile +endif diff --git a/keyboards/frosty_flake/config.h b/keyboards/frosty_flake/config.h new file mode 100644 index 0000000000..9390feb949 --- /dev/null +++ b/keyboards/frosty_flake/config.h @@ -0,0 +1,162 @@ +/* +Copyright 2012 Jun Wako + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 2 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see . +*/ + +#ifndef CONFIG_H +#define CONFIG_H + +#include "config_common.h" + +/* USB Device descriptor parameter */ +#define VENDOR_ID 0xFEED +#define PRODUCT_ID 0x6060 +#define DEVICE_VER 0x0001 +#define MANUFACTURER You +#define PRODUCT frosty_flake +#define DESCRIPTION A custom keyboard + +/* key matrix size */ +#define MATRIX_ROWS 2 +#define MATRIX_COLS 3 + +/* + * Keyboard Matrix Assignments + * + * Change this to how you wired your keyboard + * COLS: AVR pins used for columns, left to right + * ROWS: AVR pins used for rows, top to bottom + * DIODE_DIRECTION: COL2ROW = COL = Anode (+), ROW = Cathode (-, marked on diode) + * ROW2COL = ROW = Anode (+), COL = Cathode (-, marked on diode) + * +*/ +#define MATRIX_ROW_PINS { D0, D5 } +#define MATRIX_COL_PINS { F1, F0, B0 } +#define UNUSED_PINS + +/* COL2ROW, ROW2COL, or CUSTOM_MATRIX */ +#define DIODE_DIRECTION COL2ROW + +// #define BACKLIGHT_PIN B7 +// #define BACKLIGHT_BREATHING +// #define BACKLIGHT_LEVELS 3 + + +/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */ +#define DEBOUNCING_DELAY 5 + +/* define if matrix has ghost (lacks anti-ghosting diodes) */ +//#define MATRIX_HAS_GHOST + +/* number of backlight levels */ + +/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */ +#define LOCKING_SUPPORT_ENABLE +/* Locking resynchronize hack */ +#define LOCKING_RESYNC_ENABLE + +/* + * Force NKRO + * + * Force NKRO (nKey Rollover) to be enabled by default, regardless of the saved + * state in the bootmagic EEPROM settings. (Note that NKRO must be enabled in the + * makefile for this to work.) + * + * If forced on, NKRO can be disabled via magic key (default = LShift+RShift+N) + * until the next keyboard reset. + * + * NKRO may prevent your keystrokes from being detected in the BIOS, but it is + * fully operational during normal computer usage. + * + * For a less heavy-handed approach, enable NKRO via magic key (LShift+RShift+N) + * or via bootmagic (hold SPACE+N while plugging in the keyboard). Once set by + * bootmagic, NKRO mode will always be enabled until it is toggled again during a + * power-up. + * + */ +//#define FORCE_NKRO + +/* + * Magic Key Options + * + * Magic keys are hotkey commands that allow control over firmware functions of + * the keyboard. They are best used in combination with the HID Listen program, + * found here: https://www.pjrc.com/teensy/hid_listen.html + * + * The options below allow the magic key functionality to be changed. This is + * useful if your keyboard/keypad is missing keys and you want magic key support. + * + */ + +/* key combination for magic key command */ +#define IS_COMMAND() ( \ + keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \ +) + +/* control how magic key switches layers */ +//#define MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS true +//#define MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS true +//#define MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM false + +/* override magic key keymap */ +//#define MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS +//#define MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS +//#define MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM +//#define MAGIC_KEY_HELP1 H +//#define MAGIC_KEY_HELP2 SLASH +//#define MAGIC_KEY_DEBUG D +//#define MAGIC_KEY_DEBUG_MATRIX X +//#define MAGIC_KEY_DEBUG_KBD K +//#define MAGIC_KEY_DEBUG_MOUSE M +//#define MAGIC_KEY_VERSION V +//#define MAGIC_KEY_STATUS S +//#define MAGIC_KEY_CONSOLE C +//#define MAGIC_KEY_LAYER0_ALT1 ESC +//#define MAGIC_KEY_LAYER0_ALT2 GRAVE +//#define MAGIC_KEY_LAYER0 0 +//#define MAGIC_KEY_LAYER1 1 +//#define MAGIC_KEY_LAYER2 2 +//#define MAGIC_KEY_LAYER3 3 +//#define MAGIC_KEY_LAYER4 4 +//#define MAGIC_KEY_LAYER5 5 +//#define MAGIC_KEY_LAYER6 6 +//#define MAGIC_KEY_LAYER7 7 +//#define MAGIC_KEY_LAYER8 8 +//#define MAGIC_KEY_LAYER9 9 +//#define MAGIC_KEY_BOOTLOADER PAUSE +//#define MAGIC_KEY_LOCK CAPS +//#define MAGIC_KEY_EEPROM E +//#define MAGIC_KEY_NKRO N +//#define MAGIC_KEY_SLEEP_LED Z + +/* + * Feature disable options + * These options are also useful to firmware size reduction. + */ + +/* disable debug print */ +//#define NO_DEBUG + +/* disable print */ +//#define NO_PRINT + +/* disable action features */ +//#define NO_ACTION_LAYER +//#define NO_ACTION_TAPPING +//#define NO_ACTION_ONESHOT +//#define NO_ACTION_MACRO +//#define NO_ACTION_FUNCTION + +#endif diff --git a/keyboards/frosty_flake/frosty_flake.c b/keyboards/frosty_flake/frosty_flake.c new file mode 100644 index 0000000000..22979a4515 --- /dev/null +++ b/keyboards/frosty_flake/frosty_flake.c @@ -0,0 +1,28 @@ +#include "frosty_flake.h" + +void matrix_init_kb(void) { + // put your keyboard start-up code here + // runs once when the firmware starts up + + matrix_init_user(); +} + +void matrix_scan_kb(void) { + // put your looping keyboard code here + // runs every cycle (a lot) + + matrix_scan_user(); +} + +bool process_record_kb(uint16_t keycode, keyrecord_t *record) { + // put your per-action keyboard code here + // runs for every action, just before processing by the firmware + + return process_record_user(keycode, 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); +} diff --git a/keyboards/frosty_flake/frosty_flake.h b/keyboards/frosty_flake/frosty_flake.h new file mode 100644 index 0000000000..90ea25ed99 --- /dev/null +++ b/keyboards/frosty_flake/frosty_flake.h @@ -0,0 +1,19 @@ +#ifndef FROSTY_FLAKE_H +#define FROSTY_FLAKE_H + +#include "quantum.h" + +// This a shortcut to help you visually see your layout. +// The following is an example using the Planck MIT layout +// The first section contains all of the arguements +// The second converts the arguments into a two-dimensional array +#define KEYMAP( \ + k00, k01, k02, \ + k10, k11 \ +) \ +{ \ + { k00, k01, k02 }, \ + { k10, KC_NO, k11 }, \ +} + +#endif diff --git a/keyboards/frosty_flake/keymaps/default/Makefile b/keyboards/frosty_flake/keymaps/default/Makefile new file mode 100644 index 0000000000..9d3df5964f --- /dev/null +++ b/keyboards/frosty_flake/keymaps/default/Makefile @@ -0,0 +1,21 @@ +# Build Options +# change to "no" to disable the options, or define them in the Makefile in +# the appropriate keymap folder that will get included automatically +# +BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000) +MOUSEKEY_ENABLE = yes # Mouse keys(+4700) +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 +MIDI_ENABLE = no # MIDI controls +AUDIO_ENABLE = no # 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. +SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend + +ifndef QUANTUM_DIR + include ../../../../Makefile +endif diff --git a/keyboards/frosty_flake/keymaps/default/config.h b/keyboards/frosty_flake/keymaps/default/config.h new file mode 100644 index 0000000000..8893d122e0 --- /dev/null +++ b/keyboards/frosty_flake/keymaps/default/config.h @@ -0,0 +1,8 @@ +#ifndef CONFIG_USER_H +#define CONFIG_USER_H + +#include "../../config.h" + +// place overrides here + +#endif diff --git a/keyboards/frosty_flake/keymaps/default/keymap.c b/keyboards/frosty_flake/keymaps/default/keymap.c new file mode 100644 index 0000000000..1c9e33b649 --- /dev/null +++ b/keyboards/frosty_flake/keymaps/default/keymap.c @@ -0,0 +1,44 @@ +#include "frosty_flake.h" + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { +[0] = KEYMAP( /* Base */ + KC_A, KC_1, KC_H, \ + KC_TAB, KC_SPC \ +), +}; + +const uint16_t PROGMEM fn_actions[] = { + +}; + +const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) +{ + // MACRODOWN only works in this function + switch(id) { + case 0: + if (record->event.pressed) { + register_code(KC_RSFT); + } else { + unregister_code(KC_RSFT); + } + break; + } + return MACRO_NONE; +}; + + +void matrix_init_user(void) { + +} + +void matrix_scan_user(void) { + +} + +bool process_record_user(uint16_t keycode, keyrecord_t *record) { + return true; +} + +void led_set_user(uint8_t usb_led) { + +} diff --git a/keyboards/frosty_flake/keymaps/default/readme.md b/keyboards/frosty_flake/keymaps/default/readme.md new file mode 100644 index 0000000000..11bf4825ff --- /dev/null +++ b/keyboards/frosty_flake/keymaps/default/readme.md @@ -0,0 +1 @@ +# The default keymap for frosty_flake diff --git a/keyboards/frosty_flake/readme.md b/keyboards/frosty_flake/readme.md new file mode 100644 index 0000000000..a329650619 --- /dev/null +++ b/keyboards/frosty_flake/readme.md @@ -0,0 +1,28 @@ +frosty_flake keyboard firmware +====================== + +## Quantum MK Firmware + +For the full Quantum feature list, see [the parent readme](/). + +## Building + +Download or clone the whole firmware and navigate to the keyboards/frosty_flake folder. Once your dev env is setup, you'll be able to type `make` to generate your .hex - you can then use the Teensy Loader to program your .hex file. + +Depending on which keymap you would like to use, you will have to compile slightly differently. + +### Default + +To build with the default keymap, simply run `make default`. + +### Other Keymaps + +Several version of keymap are available in advance but you are recommended to define your favorite layout yourself. To define your own keymap create a folder with the name of your keymap in the keymaps folder, and see keymap documentation (you can find in top readme.md) and existant keymap files. + +To build the firmware binary hex file with a keymap just do `make` with a keymap like this: + +``` +$ make [default|jack|] +``` + +Keymaps follow the format **__\.c__** and are stored in the `keymaps` folder. diff --git a/keyboards/frosty_flake/rules.mk b/keyboards/frosty_flake/rules.mk new file mode 100644 index 0000000000..bad3387bf4 --- /dev/null +++ b/keyboards/frosty_flake/rules.mk @@ -0,0 +1,68 @@ +# MCU name +#MCU = at90usb1287 +MCU = atmega32u4 + +# Processor frequency. +# This will define a symbol, F_CPU, in all source code files equal to the +# processor frequency in Hz. You can then use this symbol in your source code to +# calculate timings. Do NOT tack on a 'UL' at the end, this will be done +# automatically to create a 32-bit value in your source code. +# +# This will be an integer division of F_USB below, as it is sourced by +# F_USB after it has run through any CPU prescalers. Note that this value +# does not *change* the processor frequency - it should merely be updated to +# reflect the processor speed set externally so that the code can use accurate +# software delays. +F_CPU = 16000000 + + +# +# LUFA specific +# +# Target architecture (see library "Board Types" documentation). +ARCH = AVR8 + +# Input clock frequency. +# This will define a symbol, F_USB, in all source code files equal to the +# input clock frequency (before any prescaling is performed) in Hz. This value may +# differ from F_CPU if prescaling is used on the latter, and is required as the +# raw input clock is fed directly to the PLL sections of the AVR for high speed +# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL' +# at the end, this will be done automatically to create a 32-bit value in your +# source code. +# +# If no clock division is performed on the input clock inside the AVR (via the +# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU. +F_USB = $(F_CPU) + +# Interrupt driven control endpoint task(+60) +OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT + + +# Boot Section Size in *bytes* +# Teensy halfKay 512 +# Teensy++ halfKay 1024 +# Atmel DFU loader 4096 +# LUFA bootloader 4096 +# USBaspLoader 2048 +OPT_DEFS += -DBOOTLOADER_SIZE=512 + + +# Build Options +# change yes to no to disable +# +BOOTMAGIC_ENABLE ?= no # 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) +COMMAND_ENABLE ?= yes # Commands for debug and configuration +# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE +SLEEP_LED_ENABLE ?= no # Breathing sleep LED during USB suspend +# if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work +NKRO_ENABLE ?= no # USB Nkey Rollover +BACKLIGHT_ENABLE ?= no # Enable keyboard backlight functionality on B7 by default +MIDI_ENABLE ?= no # MIDI controls +UNICODE_ENABLE ?= no # Unicode +BLUETOOTH_ENABLE ?= no # Enable Bluetooth with the Adafruit EZ-Key HID +AUDIO_ENABLE ?= no # Audio output on port C6 +FAUXCLICKY_ENABLE ?= no # Use buzzer to emulate clicky switches From 19fd20261b895a6848c8b15fd7365d5b87b7fd72 Mon Sep 17 00:00:00 2001 From: Gabriel Young Date: Sat, 18 Mar 2017 16:19:10 -0700 Subject: [PATCH 37/91] sketch out frosty flake matrix using custom matrix.c based on kitten paw --- keyboards/frosty_flake/config.h | 24 +++-- keyboards/frosty_flake/matrix.c | 167 ++++++++++++++++++++++++++++++++ keyboards/frosty_flake/rules.mk | 7 +- 3 files changed, 187 insertions(+), 11 deletions(-) create mode 100644 keyboards/frosty_flake/matrix.c diff --git a/keyboards/frosty_flake/config.h b/keyboards/frosty_flake/config.h index 9390feb949..2575a52b18 100644 --- a/keyboards/frosty_flake/config.h +++ b/keyboards/frosty_flake/config.h @@ -24,13 +24,19 @@ along with this program. If not, see . #define VENDOR_ID 0xFEED #define PRODUCT_ID 0x6060 #define DEVICE_VER 0x0001 -#define MANUFACTURER You +#define MANUFACTURER Bathroom Epiphanies #define PRODUCT frosty_flake -#define DESCRIPTION A custom keyboard +#define DESCRIPTION Frosty Flake controller for the CM Storm Quick Fire Rapid + +/* + * Frosty Flake Rev. 20140521 made by Bathroom Ephiphanies + * Schematic is available at https://deskthority.net/w/images/a/a4/Frosty_Flake_Schematics.pdf + * + */ /* key matrix size */ -#define MATRIX_ROWS 2 -#define MATRIX_COLS 3 +#define MATRIX_ROWS 8 // Row0 to Row7 in the schematic +#define MATRIX_COLS 18 // ColA to ColR in the schematic /* * Keyboard Matrix Assignments @@ -42,13 +48,13 @@ along with this program. If not, see . * ROW2COL = ROW = Anode (+), COL = Cathode (-, marked on diode) * */ -#define MATRIX_ROW_PINS { D0, D5 } -#define MATRIX_COL_PINS { F1, F0, B0 } -#define UNUSED_PINS +//#define MATRIX_ROW_PINS { D5, D4, D6, D2, D1, D0 } +//#define MATRIX_COL_PINS << n/a >> +//#define UNUSED_PINS { B0, C4, D3 } /* COL2ROW, ROW2COL, or CUSTOM_MATRIX */ -#define DIODE_DIRECTION COL2ROW - +//#define DIODE_DIRECTION << n/a >> + // #define BACKLIGHT_PIN B7 // #define BACKLIGHT_BREATHING // #define BACKLIGHT_LEVELS 3 diff --git a/keyboards/frosty_flake/matrix.c b/keyboards/frosty_flake/matrix.c new file mode 100644 index 0000000000..21b0d90885 --- /dev/null +++ b/keyboards/frosty_flake/matrix.c @@ -0,0 +1,167 @@ +//TODO(gabe): customize for frosty flake + +/* + Copyright 2014 Ralf Schmitt + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . +*/ + +#include +#include +#include +#include +#include "print.h" +#include "debug.h" +#include "util.h" +#include "matrix.h" + +#ifndef DEBOUNCING_DELAY +# define DEBOUNCING_DELAY 5 +#endif +static uint8_t debouncing = DEBOUNCING_DELAY; + +static matrix_row_t matrix[MATRIX_ROWS]; +static matrix_row_t matrix_debouncing[MATRIX_ROWS]; + +static uint8_t read_rows(void); +static void select_col(uint8_t col); + +inline uint8_t matrix_rows(void) { + return MATRIX_ROWS; +} + +inline uint8_t matrix_cols(void) { + return MATRIX_COLS; +} + +/* Column pin configuration + * + * col: 0 1 2 3 4 5 6 7 + * pin: PC7 PD5 PD3 PD1 PC2 PD6 PD4 PD2 + * + * Rrr pin configuration + * + * These rrrs uses one 74HC154 4 to 16 bit demultiplexer (low + * active), together with 2 rrrs driven directly from the micro + * controller, to control the 18 rrrs. The rrrs are driven from + * pins B6,5,4,3,2,1,0. + */ +void matrix_init(void) { + DDRC &= ~0b10000100; // Row input pins + DDRD &= ~0b01111110; + PORTC |= 0b10000100; + PORTD |= 0b01111110; + + DDRB |= 0b01111111; // Column output pins + + for (uint8_t i=0; i < MATRIX_ROWS; i++) { + matrix[i] = 0; + matrix_debouncing[i] = 0; + } + matrix_init_quantum(); +} + +uint8_t matrix_scan(void) { + for (uint8_t col = 0; col < MATRIX_COLS; col++) { + select_col(col); + _delay_us(3); + uint8_t rows = read_rows(); + for (uint8_t row = 0; row < MATRIX_ROWS; row++) { + bool prev_bit = matrix_debouncing[row] & ((matrix_row_t)1< Date: Sun, 19 Mar 2017 00:07:48 +0000 Subject: [PATCH 38/91] Don't feel like tap dancing arrows anymore --- keyboards/planck/keymaps/khord/keymap.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/keyboards/planck/keymaps/khord/keymap.c b/keyboards/planck/keymaps/khord/keymap.c index 6f19966f25..2ee57b8f4a 100644 --- a/keyboards/planck/keymaps/khord/keymap.c +++ b/keyboards/planck/keymaps/khord/keymap.c @@ -64,10 +64,10 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * `-----------------------------------------------------------------------------------' */ [_QWERTY] = { - {KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC }, - {TD(ESC_CAP), KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT }, - {KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, SFT_T(KC_ENT)}, - {BACKLIT, KC_LCTL, KC_LALT, KC_LGUI, LOWER, KC_SPC, KC_SPC, RAISE, TD(LFT_HOM), TD(DWN_PDN), TD(UPP_PUP), TD(RGT_END) } + {KC_TAB, KC_Q, KC_W, KC_E, KC_R KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC }, + {TD(ESC_CAP), KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT }, + {KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, SFT_T(KC_ENT)}, + {BACKLIT, KC_LCTL, KC_LALT, KC_LGUI, LOWER, KC_SPC, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT } }, /* Colemak From 561da65606c8b27f3fecc10f41ff139d7625fd08 Mon Sep 17 00:00:00 2001 From: Dylan Khor Date: Sun, 19 Mar 2017 00:14:43 +0000 Subject: [PATCH 39/91] Missing comma --- keyboards/planck/keymaps/khord/keymap.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/keyboards/planck/keymaps/khord/keymap.c b/keyboards/planck/keymaps/khord/keymap.c index 2ee57b8f4a..65ba1c4176 100644 --- a/keyboards/planck/keymaps/khord/keymap.c +++ b/keyboards/planck/keymaps/khord/keymap.c @@ -64,7 +64,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * `-----------------------------------------------------------------------------------' */ [_QWERTY] = { - {KC_TAB, KC_Q, KC_W, KC_E, KC_R KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC }, + {KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC }, {TD(ESC_CAP), KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT }, {KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, SFT_T(KC_ENT)}, {BACKLIT, KC_LCTL, KC_LALT, KC_LGUI, LOWER, KC_SPC, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT } From d7fc2365402069a6149c9593dad82c4b4e31b78a Mon Sep 17 00:00:00 2001 From: Gabriel Young Date: Sun, 19 Mar 2017 15:59:21 -0700 Subject: [PATCH 40/91] successfully read data from the matrix --- keyboards/frosty_flake/config.h | 7 +- .../frosty_flake/keymaps/default/Makefile | 4 +- .../frosty_flake/keymaps/default/keymap.c | 7 +- keyboards/frosty_flake/matrix.c | 150 ++++++++++-------- 4 files changed, 93 insertions(+), 75 deletions(-) diff --git a/keyboards/frosty_flake/config.h b/keyboards/frosty_flake/config.h index 2575a52b18..507e6a6b69 100644 --- a/keyboards/frosty_flake/config.h +++ b/keyboards/frosty_flake/config.h @@ -30,13 +30,14 @@ along with this program. If not, see . /* * Frosty Flake Rev. 20140521 made by Bathroom Ephiphanies - * Schematic is available at https://deskthority.net/w/images/a/a4/Frosty_Flake_Schematics.pdf + * Ported from the Bathroom Epiphanies TMK Firmware: + * https://github.com/BathroomEpiphanies/epiphanies_tmk_keyboard/tree/master/be_controllers * */ /* key matrix size */ -#define MATRIX_ROWS 8 // Row0 to Row7 in the schematic -#define MATRIX_COLS 18 // ColA to ColR in the schematic +#define MATRIX_ROWS 18 +#define MATRIX_COLS 8 /* * Keyboard Matrix Assignments diff --git a/keyboards/frosty_flake/keymaps/default/Makefile b/keyboards/frosty_flake/keymaps/default/Makefile index 9d3df5964f..0887666802 100644 --- a/keyboards/frosty_flake/keymaps/default/Makefile +++ b/keyboards/frosty_flake/keymaps/default/Makefile @@ -3,9 +3,9 @@ # the appropriate keymap folder that will get included automatically # BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000) -MOUSEKEY_ENABLE = yes # Mouse keys(+4700) +MOUSEKEY_ENABLE = no # Mouse keys(+4700) EXTRAKEY_ENABLE = yes # Audio control and System control(+450) -CONSOLE_ENABLE = no # Console for debug(+400) +CONSOLE_ENABLE = yes # 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 diff --git a/keyboards/frosty_flake/keymaps/default/keymap.c b/keyboards/frosty_flake/keymaps/default/keymap.c index 1c9e33b649..e553555668 100644 --- a/keyboards/frosty_flake/keymaps/default/keymap.c +++ b/keyboards/frosty_flake/keymaps/default/keymap.c @@ -28,11 +28,12 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) void matrix_init_user(void) { - + debug_enable = true; } void matrix_scan_user(void) { - + if (matrix_is_modified()) + matrix_print(); } bool process_record_user(uint16_t keycode, keyrecord_t *record) { @@ -41,4 +42,4 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { void led_set_user(uint8_t usb_led) { -} +} \ No newline at end of file diff --git a/keyboards/frosty_flake/matrix.c b/keyboards/frosty_flake/matrix.c index 21b0d90885..70456ada32 100644 --- a/keyboards/frosty_flake/matrix.c +++ b/keyboards/frosty_flake/matrix.c @@ -1,5 +1,3 @@ -//TODO(gabe): customize for frosty flake - /* Copyright 2014 Ralf Schmitt @@ -26,16 +24,71 @@ #include "util.h" #include "matrix.h" +#ifndef CONFIG_SPECIFIC_H +#define CONFIG_SPECIFIC_H + +#define CONFIG_LED_IO \ + DDRB |= (1<<7); \ + DDRC |= (1<<5) | (1<<6); + +#define USB_LED_CAPS_LOCK_ON PORTC &= ~(1<<5) +#define USB_LED_CAPS_LOCK_OFF PORTC |= (1<<5) +#define USB_LED_NUM_LOCK_ON PORTB &= ~(1<<7) +#define USB_LED_NUM_LOCK_OFF PORTB |= (1<<7) +#define USB_LED_SCROLL_LOCK_ON PORTC &= ~(1<<6) +#define USB_LED_SCROLL_LOCK_OFF PORTC |= (1<<6) + +#define CONFIG_MATRIX_IO \ + /* Column output pins */ \ + DDRD |= 0b01111011; \ + /* Row input pins */ \ + DDRC &= ~0b10000000; \ + DDRB &= ~0b01111111; \ + PORTC |= 0b10000000; \ + PORTB |= 0b01111111; + +#define MATRIX_ROW_SCAN \ + (PINC&(1<<7) ? 0 : ((matrix_row_t)1<<0)) | \ + (PINB&(1<<5) ? 0 : ((matrix_row_t)1<<1)) | \ + (PINB&(1<<4) ? 0 : ((matrix_row_t)1<<2)) | \ + (PINB&(1<<6) ? 0 : ((matrix_row_t)1<<3)) | \ + (PINB&(1<<1) ? 0 : ((matrix_row_t)1<<4)) | \ + (PINB&(1<<2) ? 0 : ((matrix_row_t)1<<5)) | \ + (PINB&(1<<3) ? 0 : ((matrix_row_t)1<<6)) | \ + (PINB&(1<<0) ? 0 : ((matrix_row_t)1<<7)) + +#define MATRIX_ROW_SELECT \ + case 0: PORTD = (PORTD & ~0b01111011) | 0b00011011; break; \ + case 1: PORTD = (PORTD & ~0b01111011) | 0b01000011; break; \ + case 2: PORTD = (PORTD & ~0b01111011) | 0b01101010; break; \ + case 3: PORTD = (PORTD & ~0b01111011) | 0b01111001; break; \ + case 4: PORTD = (PORTD & ~0b01111011) | 0b01100010; break; \ + case 5: PORTD = (PORTD & ~0b01111011) | 0b01110001; break; \ + case 6: PORTD = (PORTD & ~0b01111011) | 0b01100001; break; \ + case 7: PORTD = (PORTD & ~0b01111011) | 0b01110000; break; \ + case 8: PORTD = (PORTD & ~0b01111011) | 0b01100000; break; \ + case 9: PORTD = (PORTD & ~0b01111011) | 0b01101000; break; \ + case 10: PORTD = (PORTD & ~0b01111011) | 0b00101011; break; \ + case 11: PORTD = (PORTD & ~0b01111011) | 0b00110011; break; \ + case 12: PORTD = (PORTD & ~0b01111011) | 0b00100011; break; \ + case 13: PORTD = (PORTD & ~0b01111011) | 0b01111000; break; \ + case 14: PORTD = (PORTD & ~0b01111011) | 0b00010011; break; \ + case 15: PORTD = (PORTD & ~0b01111011) | 0b01101001; break; \ + case 16: PORTD = (PORTD & ~0b01111011) | 0b00001011; break; \ + case 17: PORTD = (PORTD & ~0b01111011) | 0b00111011; break; + +#endif + #ifndef DEBOUNCING_DELAY -# define DEBOUNCING_DELAY 5 +# define DEBOUNCING_DELAY 0 #endif static uint8_t debouncing = DEBOUNCING_DELAY; static matrix_row_t matrix[MATRIX_ROWS]; static matrix_row_t matrix_debouncing[MATRIX_ROWS]; -static uint8_t read_rows(void); -static void select_col(uint8_t col); +static matrix_row_t scan_row(void); +static void select_row(uint8_t row); inline uint8_t matrix_rows(void) { return MATRIX_ROWS; @@ -45,58 +98,40 @@ inline uint8_t matrix_cols(void) { return MATRIX_COLS; } -/* Column pin configuration - * - * col: 0 1 2 3 4 5 6 7 - * pin: PC7 PD5 PD3 PD1 PC2 PD6 PD4 PD2 - * - * Rrr pin configuration - * - * These rrrs uses one 74HC154 4 to 16 bit demultiplexer (low - * active), together with 2 rrrs driven directly from the micro - * controller, to control the 18 rrrs. The rrrs are driven from - * pins B6,5,4,3,2,1,0. - */ void matrix_init(void) { - DDRC &= ~0b10000100; // Row input pins - DDRD &= ~0b01111110; - PORTC |= 0b10000100; - PORTD |= 0b01111110; - - DDRB |= 0b01111111; // Column output pins + CONFIG_MATRIX_IO; for (uint8_t i=0; i < MATRIX_ROWS; i++) { matrix[i] = 0; matrix_debouncing[i] = 0; } + matrix_init_quantum(); } uint8_t matrix_scan(void) { - for (uint8_t col = 0; col < MATRIX_COLS; col++) { - select_col(col); + for (uint8_t row = 0; row < MATRIX_ROWS; row++) { + select_row(row); _delay_us(3); - uint8_t rows = read_rows(); - for (uint8_t row = 0; row < MATRIX_ROWS; row++) { + matrix_row_t row_scan = scan_row(); + for (uint8_t col = 0; col < MATRIX_COLS; col++) { bool prev_bit = matrix_debouncing[row] & ((matrix_row_t)1< Date: Sun, 19 Mar 2017 19:55:55 -0700 Subject: [PATCH 41/91] start to define keymap; annoying because rows and columns are swapped from schematic --- keyboards/frosty_flake/frosty_flake.h | 74 +++++++++++++++++++ .../frosty_flake/keymaps/default/keymap.c | 11 ++- keyboards/frosty_flake/matrix.c | 4 +- 3 files changed, 84 insertions(+), 5 deletions(-) diff --git a/keyboards/frosty_flake/frosty_flake.h b/keyboards/frosty_flake/frosty_flake.h index 90ea25ed99..767efcbd81 100644 --- a/keyboards/frosty_flake/frosty_flake.h +++ b/keyboards/frosty_flake/frosty_flake.h @@ -7,6 +7,7 @@ // The following is an example using the Planck MIT layout // The first section contains all of the arguements // The second converts the arguments into a two-dimensional array +#if 0 #define KEYMAP( \ k00, k01, k02, \ k10, k11 \ @@ -15,5 +16,78 @@ { k00, k01, k02 }, \ { k10, KC_NO, k11 }, \ } +#endif + +/* + Matrix col/row mapping + + ,----. ,-------------------. ,-------------------. ,-------------------. ,--------------. + | J6 | | I4 | H4 | H2 | H6 | | A7 | E6 | D2 | D4 | | B4 | B7 | B6 | B0 | | C7 | C5 | A5 | + `----' `-------------------' `-------------------' `-------------------' `--------------' + ,-------------------------------------------------------------------------. ,--------------. ,-------------------. + | J4 | J7 | I7 | H7 | G7 | G4 | F4 | F7 | E7 | D7 | R7 | R4 | E4 | B2 | | L4 | O4 | Q4 | | K1 | L1 | Q1 | Q0 | + |-------------------------------------------------------------------------| |--------------| |-------------------| + | J2 | J5 | I5 | H5 | G5 | G2 | F2 | F5 | E5 | D5 | R5 | R2 | E2 | B3 | | K4 | O7 | Q7 | | K5 | L5 | Q5 | O5 | + |-------------------------------------------------------------------------| '--------------' |-------------- | + | O5 | J3 | I3 | H3 | G3 | G6 | F6 | F3 | E3 | D3 | R3 | R6 | B1 | | K2 | L2 | Q2 | | + |-------------------------------------------------------------------------| ,----. |-------------------| + | N2 | J1 | I1 | H1 | G1 | G0 | F0 | F1 | E1 | D1 | R0 | N3 | | O6 | | K3 | L3 | Q3 | O3 | + |-------------------------------------------------------------------------| ,--------------. |-------------- | + | A4 | P2 | C6 | K6 | C0 | M3 | D0 | A1 | | O0 | K0 | L0 | | L6 | Q6 | | + `-------------------------------------------------------------------------' `--------------' `-------------------' +*/ + +#define KEYMAP( \ + KJ6, KI4, KH4, KH2, KH6, KA7, KE6, KD2, KD4, KB4, KB7, KB6, KB0, KC7, KC5, KA5, \ + KJ4, KJ7, KI7, KH7, KG7, KG4, KF4, KF7, KE7, KD7, KR7, KR4, KE4, KB2, KL4, KO4, KQ4, KK1, KL1, KQ1, KQ0, \ + KJ2, KJ5, KI5, KH5, KG5, KG2, KF2, KF5, KE5, KD5, KR5, KR2, KE2, KB3, KK4, KO7, KQ7, KK5, KL5, KQ5, KO5, \ + KI2, KJ3, KI3, KH3, KG3, KG6, KF6, KF3, KE3, KD3, KR3, KR6, KB1, KK2, KL2, KQ2, \ + KN2, KI6, KJ1, KI1, KH1, KG1, KG0, KF0, KF1, KE1, KD1, KR0, KN3, KO6, KK3, KL3, KQ3, KO3, \ + KA4, KP2, KC6, KK6, KC0, KM3, KD0, KA1, KO0, KK0, KL0, KL6, KQ6 \ +) \ +{ \ +/* 0 1 2 3 4 5 6 7 */ \ +/* A */ { KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO }, \ +/* B */ { KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO }, \ +/* C */ { KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO }, \ +/* D */ { KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO }, \ +/* E */ { KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO }, \ +/* F */ { KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO }, \ +/* G */ { KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO }, \ +/* H */ { KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO }, \ +/* I */ { KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO }, \ +/* J */ { KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KJ6, KC_NO }, \ +/* K */ { KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO }, \ +/* L */ { KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO }, \ +/* M */ { KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO }, \ +/* N */ { KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO }, \ +/* O */ { KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO }, \ +/* P */ { KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO }, \ +/* Q */ { KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO }, \ +/* R */ { KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO } \ +} + +#if 0 +#define KEYMAP( \ + KJ6, KI4, KH4, KH2, KH6, KA7, KE6, KD2, KD4, KB4, KB7, KB6, KB0, KC7, KC5, KA5, \ + KJ4, KJ7, KI7, KH7, KG7, KG4, KF4, KF7, KE7, KD7, KR7, KR4, KE4, KB2, KL4, KO4, KQ4, KK1, KL1, KQ1, KQ0, \ + KJ2, KJ5, KI5, KH5, KG5, KG2, KF2, KF5, KE5, KD5, KR5, KR2, KE2, KB3, KK4, KO7, KQ7, KK5, KL5, KQ5, KO5, \ + KI2, KJ3, KI3, KH3, KG3, KG6, KF6, KF3, KE3, KD3, KR3, KR6, KB1, KK2, KL2, KQ2, \ + KN2, KI6, KJ1, KI1, KH1, KG1, KG0, KF0, KF1, KE1, KD1, KR0, KN3, KO6, KK3, KL3, KQ3, KO3, \ + KA4, KP2, KC6, KK6, KC0, KM3, KD0, KA1, KO0, KK0, KL0, KL6, KQ6 \ +) \ +{ \ +/* Columns and rows need to be swapped in the below definition */ \ +/* A B C D E F G H I J K L M N O P Q R */ \ +/* 0 */ { KC_NO, KB0, KC0, KD0, KC_NO, KF0, KG0, KC_NO, KC_NO, KC_NO, KK0, KL0, KC_NO, KC_NO, KO0, KC_NO, KQ0, KR0 }, \ +/* 1 */ { KA1, KB1, KC_NO, KD1, KE1, KF1, KG1, KH1, KI1, KJ1, KK1, KL1, KC_NO, KC_NO, KC_NO, KC_NO, KQ1, KC_NO }, \ +/* 2 */ { KC_NO, KB2, KC_NO, KD2, KE2, KF2, KG2, KH2, KI2, KJ2, KK2, KL2, KC_NO, KN2, KC_NO, KP2, KQ2, KR2 }, \ +/* 3 */ { KC_NO, KB3, KC_NO, KD3, KE3, KF3, KG3, KH3, KI3, KJ3, KK3, KL3, KM3, KN3, KO3, KC_NO, KQ3, KR3 }, \ +/* 4 */ { KA4, KB4, KC_NO, KD4, KE4, KF4, KG4, KH4, KI4, KJ4, KK4, KL4, KC_NO, KC_NO, KO4, KC_NO, KQ4, KR4 }, \ +/* 5 */ { KA5, KC_NO, KC5, KD5, KE5, KF5, KG5, KH5, KI5, KJ5, KK5, KL5, KC_NO, KC_NO, KO5, KC_NO, KQ5, KR5 }, \ +/* 6 */ { KC_NO, KB6, KC6, KC_NO, KE6, KF6, KG6, KH6, KI6, KJ6, KK6, KL6, KC_NO, KC_NO, KO6, KC_NO, KQ6, KR6 }, \ +/* 7 */ { KA7, KB7, KC7, KD7, KE7, KF7, KG7, KH7, KI7, KJ7, KC_NO, KC_NO, KC_NO, KC_NO, KO7, KC_NO, KQ7, KR7 } \ +} +#endif #endif diff --git a/keyboards/frosty_flake/keymaps/default/keymap.c b/keyboards/frosty_flake/keymaps/default/keymap.c index e553555668..90711732fa 100644 --- a/keyboards/frosty_flake/keymaps/default/keymap.c +++ b/keyboards/frosty_flake/keymaps/default/keymap.c @@ -1,10 +1,13 @@ #include "frosty_flake.h" const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { -[0] = KEYMAP( /* Base */ - KC_A, KC_1, KC_H, \ - KC_TAB, KC_SPC \ -), +[0] = KEYMAP(\ + KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR,KC_SLCK,KC_PAUS, \ + KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0,KC_MINS, KC_EQL,KC_BSPC, KC_INS,KC_HOME,KC_PGUP, KC_NLCK,KC_PSLS,KC_PAST,KC_PMNS, \ + KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P,KC_LBRC,KC_RBRC,KC_BSLS, KC_DEL, KC_END,KC_PGDN, KC_P7, KC_P8, KC_P9,KC_PPLS, \ + KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L,KC_SCLN,KC_QUOT, KC_ENT, KC_P4, KC_P5, KC_P6, \ + KC_LSFT,KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M,KC_COMM, KC_DOT,KC_SLSH, KC_RSFT, KC_UP, KC_P1, KC_P2, KC_P3,KC_PENT, \ + KC_LCTL,KC_LGUI,KC_LALT, KC_SPC, KC_RALT,KC_RGUI, KC_APP,KC_RCTL, KC_LEFT,KC_DOWN,KC_RGHT, KC_P0,KC_PDOT) }; const uint16_t PROGMEM fn_actions[] = { diff --git a/keyboards/frosty_flake/matrix.c b/keyboards/frosty_flake/matrix.c index 70456ada32..07b9f6dd68 100644 --- a/keyboards/frosty_flake/matrix.c +++ b/keyboards/frosty_flake/matrix.c @@ -151,11 +151,13 @@ inline matrix_row_t matrix_get_row(uint8_t row) { return matrix[row]; } +static const char ROW_NAMES[] = "ABCDEFGHIJKLMNOPQR"; + void matrix_print(void) { print("\nr/c 01234567\n"); for (uint8_t row = 0; row < MATRIX_ROWS; row++) { matrix_row_t row_scan = matrix_get_row(row); - xprintf("%02X: ", row); + xprintf("%c: ", ROW_NAMES[row]); for (uint8_t col = 0; col < MATRIX_COLS; col++) { bool curr_bit = row_scan & (1< Date: Sun, 19 Mar 2017 20:33:41 -0700 Subject: [PATCH 42/91] Swap rows and columns to match the schematic --- keyboards/frosty_flake/config.h | 4 +- keyboards/frosty_flake/frosty_flake.h | 43 ----- .../frosty_flake/keymaps/default/keymap.c | 3 +- keyboards/frosty_flake/matrix.c | 154 +++++++----------- 4 files changed, 62 insertions(+), 142 deletions(-) diff --git a/keyboards/frosty_flake/config.h b/keyboards/frosty_flake/config.h index 507e6a6b69..f03cecb3e6 100644 --- a/keyboards/frosty_flake/config.h +++ b/keyboards/frosty_flake/config.h @@ -36,8 +36,8 @@ along with this program. If not, see . */ /* key matrix size */ -#define MATRIX_ROWS 18 -#define MATRIX_COLS 8 +#define MATRIX_ROWS 8 +#define MATRIX_COLS 18 /* * Keyboard Matrix Assignments diff --git a/keyboards/frosty_flake/frosty_flake.h b/keyboards/frosty_flake/frosty_flake.h index 767efcbd81..3b52df6baa 100644 --- a/keyboards/frosty_flake/frosty_flake.h +++ b/keyboards/frosty_flake/frosty_flake.h @@ -7,16 +7,6 @@ // The following is an example using the Planck MIT layout // The first section contains all of the arguements // The second converts the arguments into a two-dimensional array -#if 0 -#define KEYMAP( \ - k00, k01, k02, \ - k10, k11 \ -) \ -{ \ - { k00, k01, k02 }, \ - { k10, KC_NO, k11 }, \ -} -#endif /* Matrix col/row mapping @@ -36,38 +26,6 @@ | A4 | P2 | C6 | K6 | C0 | M3 | D0 | A1 | | O0 | K0 | L0 | | L6 | Q6 | | `-------------------------------------------------------------------------' `--------------' `-------------------' */ - -#define KEYMAP( \ - KJ6, KI4, KH4, KH2, KH6, KA7, KE6, KD2, KD4, KB4, KB7, KB6, KB0, KC7, KC5, KA5, \ - KJ4, KJ7, KI7, KH7, KG7, KG4, KF4, KF7, KE7, KD7, KR7, KR4, KE4, KB2, KL4, KO4, KQ4, KK1, KL1, KQ1, KQ0, \ - KJ2, KJ5, KI5, KH5, KG5, KG2, KF2, KF5, KE5, KD5, KR5, KR2, KE2, KB3, KK4, KO7, KQ7, KK5, KL5, KQ5, KO5, \ - KI2, KJ3, KI3, KH3, KG3, KG6, KF6, KF3, KE3, KD3, KR3, KR6, KB1, KK2, KL2, KQ2, \ - KN2, KI6, KJ1, KI1, KH1, KG1, KG0, KF0, KF1, KE1, KD1, KR0, KN3, KO6, KK3, KL3, KQ3, KO3, \ - KA4, KP2, KC6, KK6, KC0, KM3, KD0, KA1, KO0, KK0, KL0, KL6, KQ6 \ -) \ -{ \ -/* 0 1 2 3 4 5 6 7 */ \ -/* A */ { KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO }, \ -/* B */ { KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO }, \ -/* C */ { KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO }, \ -/* D */ { KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO }, \ -/* E */ { KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO }, \ -/* F */ { KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO }, \ -/* G */ { KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO }, \ -/* H */ { KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO }, \ -/* I */ { KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO }, \ -/* J */ { KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KJ6, KC_NO }, \ -/* K */ { KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO }, \ -/* L */ { KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO }, \ -/* M */ { KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO }, \ -/* N */ { KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO }, \ -/* O */ { KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO }, \ -/* P */ { KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO }, \ -/* Q */ { KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO }, \ -/* R */ { KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO } \ -} - -#if 0 #define KEYMAP( \ KJ6, KI4, KH4, KH2, KH6, KA7, KE6, KD2, KD4, KB4, KB7, KB6, KB0, KC7, KC5, KA5, \ KJ4, KJ7, KI7, KH7, KG7, KG4, KF4, KF7, KE7, KD7, KR7, KR4, KE4, KB2, KL4, KO4, KQ4, KK1, KL1, KQ1, KQ0, \ @@ -88,6 +46,5 @@ /* 6 */ { KC_NO, KB6, KC6, KC_NO, KE6, KF6, KG6, KH6, KI6, KJ6, KK6, KL6, KC_NO, KC_NO, KO6, KC_NO, KQ6, KR6 }, \ /* 7 */ { KA7, KB7, KC7, KD7, KE7, KF7, KG7, KH7, KI7, KJ7, KC_NO, KC_NO, KC_NO, KC_NO, KO7, KC_NO, KQ7, KR7 } \ } -#endif #endif diff --git a/keyboards/frosty_flake/keymaps/default/keymap.c b/keyboards/frosty_flake/keymaps/default/keymap.c index 90711732fa..4383f7a8d7 100644 --- a/keyboards/frosty_flake/keymaps/default/keymap.c +++ b/keyboards/frosty_flake/keymaps/default/keymap.c @@ -35,8 +35,7 @@ void matrix_init_user(void) { } void matrix_scan_user(void) { - if (matrix_is_modified()) - matrix_print(); + matrix_print(); } bool process_record_user(uint16_t keycode, keyrecord_t *record) { diff --git a/keyboards/frosty_flake/matrix.c b/keyboards/frosty_flake/matrix.c index 07b9f6dd68..f289f506ad 100644 --- a/keyboards/frosty_flake/matrix.c +++ b/keyboards/frosty_flake/matrix.c @@ -1,5 +1,5 @@ /* - Copyright 2014 Ralf Schmitt + Copyright 2017 Gabriel Young This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -24,9 +24,6 @@ #include "util.h" #include "matrix.h" -#ifndef CONFIG_SPECIFIC_H -#define CONFIG_SPECIFIC_H - #define CONFIG_LED_IO \ DDRB |= (1<<7); \ DDRC |= (1<<5) | (1<<6); @@ -38,85 +35,40 @@ #define USB_LED_SCROLL_LOCK_ON PORTC &= ~(1<<6) #define USB_LED_SCROLL_LOCK_OFF PORTC |= (1<<6) -#define CONFIG_MATRIX_IO \ - /* Column output pins */ \ - DDRD |= 0b01111011; \ - /* Row input pins */ \ - DDRC &= ~0b10000000; \ - DDRB &= ~0b01111111; \ - PORTC |= 0b10000000; \ - PORTB |= 0b01111111; - -#define MATRIX_ROW_SCAN \ - (PINC&(1<<7) ? 0 : ((matrix_row_t)1<<0)) | \ - (PINB&(1<<5) ? 0 : ((matrix_row_t)1<<1)) | \ - (PINB&(1<<4) ? 0 : ((matrix_row_t)1<<2)) | \ - (PINB&(1<<6) ? 0 : ((matrix_row_t)1<<3)) | \ - (PINB&(1<<1) ? 0 : ((matrix_row_t)1<<4)) | \ - (PINB&(1<<2) ? 0 : ((matrix_row_t)1<<5)) | \ - (PINB&(1<<3) ? 0 : ((matrix_row_t)1<<6)) | \ - (PINB&(1<<0) ? 0 : ((matrix_row_t)1<<7)) - -#define MATRIX_ROW_SELECT \ - case 0: PORTD = (PORTD & ~0b01111011) | 0b00011011; break; \ - case 1: PORTD = (PORTD & ~0b01111011) | 0b01000011; break; \ - case 2: PORTD = (PORTD & ~0b01111011) | 0b01101010; break; \ - case 3: PORTD = (PORTD & ~0b01111011) | 0b01111001; break; \ - case 4: PORTD = (PORTD & ~0b01111011) | 0b01100010; break; \ - case 5: PORTD = (PORTD & ~0b01111011) | 0b01110001; break; \ - case 6: PORTD = (PORTD & ~0b01111011) | 0b01100001; break; \ - case 7: PORTD = (PORTD & ~0b01111011) | 0b01110000; break; \ - case 8: PORTD = (PORTD & ~0b01111011) | 0b01100000; break; \ - case 9: PORTD = (PORTD & ~0b01111011) | 0b01101000; break; \ - case 10: PORTD = (PORTD & ~0b01111011) | 0b00101011; break; \ - case 11: PORTD = (PORTD & ~0b01111011) | 0b00110011; break; \ - case 12: PORTD = (PORTD & ~0b01111011) | 0b00100011; break; \ - case 13: PORTD = (PORTD & ~0b01111011) | 0b01111000; break; \ - case 14: PORTD = (PORTD & ~0b01111011) | 0b00010011; break; \ - case 15: PORTD = (PORTD & ~0b01111011) | 0b01101001; break; \ - case 16: PORTD = (PORTD & ~0b01111011) | 0b00001011; break; \ - case 17: PORTD = (PORTD & ~0b01111011) | 0b00111011; break; - -#endif - #ifndef DEBOUNCING_DELAY -# define DEBOUNCING_DELAY 0 +# define DEBOUNCING_DELAY 5 #endif static uint8_t debouncing = DEBOUNCING_DELAY; static matrix_row_t matrix[MATRIX_ROWS]; static matrix_row_t matrix_debouncing[MATRIX_ROWS]; -static matrix_row_t scan_row(void); -static void select_row(uint8_t row); - -inline uint8_t matrix_rows(void) { - return MATRIX_ROWS; -} - -inline uint8_t matrix_cols(void) { - return MATRIX_COLS; -} +static matrix_row_t scan_col(void); +static void select_col(uint8_t row); void matrix_init(void) { - CONFIG_MATRIX_IO; - - for (uint8_t i=0; i < MATRIX_ROWS; i++) { - matrix[i] = 0; - matrix_debouncing[i] = 0; - } - - matrix_init_quantum(); + /* Row output pins */ + DDRD |= 0b01111011; + /* Column input pins */ + DDRC &= ~0b10000000; + DDRB &= ~0b01111111; + PORTC |= 0b10000000; + PORTB |= 0b01111111; + + for (uint8_t i=0; i < MATRIX_ROWS; i++) + matrix[i] = matrix_debouncing[i] = 0; + + matrix_init_quantum(); } uint8_t matrix_scan(void) { - for (uint8_t row = 0; row < MATRIX_ROWS; row++) { - select_row(row); + for (uint8_t col = 0; col < MATRIX_COLS; col++) { + select_col(col); _delay_us(3); - matrix_row_t row_scan = scan_row(); - for (uint8_t col = 0; col < MATRIX_COLS; col++) { + matrix_row_t col_scan = scan_col(); + for (uint8_t row = 0; row < MATRIX_ROWS; row++) { bool prev_bit = matrix_debouncing[row] & ((matrix_row_t)1< Date: Sun, 19 Mar 2017 20:45:10 -0700 Subject: [PATCH 43/91] support LEDs --- keyboards/frosty_flake/frosty_flake.c | 40 +++++++++++++------ keyboards/frosty_flake/matrix.c | 55 +++++++++++---------------- 2 files changed, 51 insertions(+), 44 deletions(-) diff --git a/keyboards/frosty_flake/frosty_flake.c b/keyboards/frosty_flake/frosty_flake.c index 22979a4515..ed17361840 100644 --- a/keyboards/frosty_flake/frosty_flake.c +++ b/keyboards/frosty_flake/frosty_flake.c @@ -1,28 +1,46 @@ #include "frosty_flake.h" void matrix_init_kb(void) { - // put your keyboard start-up code here - // runs once when the firmware starts up + // put your keyboard start-up code here + // runs once when the firmware starts up - matrix_init_user(); + matrix_init_user(); } void matrix_scan_kb(void) { - // put your looping keyboard code here - // runs every cycle (a lot) + // put your looping keyboard code here + // runs every cycle (a lot) - matrix_scan_user(); + matrix_scan_user(); } bool process_record_kb(uint16_t keycode, keyrecord_t *record) { - // put your per-action keyboard code here - // runs for every action, just before processing by the firmware + // put your per-action keyboard code here + // runs for every action, just before processing by the firmware - return process_record_user(keycode, record); + return process_record_user(keycode, record); } void led_set_kb(uint8_t usb_led) { - // put your keyboard LED indicator (ex: Caps Lock LED) toggling code here + DDRB |= (1<<7); + DDRC |= (1<<5) | (1<<6); - led_set_user(usb_led); + print_dec(usb_led); + + if (usb_led & (1< Date: Sun, 19 Mar 2017 20:46:56 -0700 Subject: [PATCH 44/91] fix whitespace --- keyboards/frosty_flake/matrix.c | 99 ++++++++++++++++----------------- 1 file changed, 48 insertions(+), 51 deletions(-) diff --git a/keyboards/frosty_flake/matrix.c b/keyboards/frosty_flake/matrix.c index 5d711a660f..05dffdb643 100644 --- a/keyboards/frosty_flake/matrix.c +++ b/keyboards/frosty_flake/matrix.c @@ -32,8 +32,41 @@ static uint8_t debouncing = DEBOUNCING_DELAY; static matrix_row_t matrix[MATRIX_ROWS]; static matrix_row_t matrix_debouncing[MATRIX_ROWS]; -static matrix_row_t scan_col(void); -static void select_col(uint8_t row); +static matrix_row_t scan_col(void) { + return ( + (PINC&(1<<7) ? 0 : ((matrix_row_t)1<<0)) | + (PINB&(1<<5) ? 0 : ((matrix_row_t)1<<1)) | + (PINB&(1<<4) ? 0 : ((matrix_row_t)1<<2)) | + (PINB&(1<<6) ? 0 : ((matrix_row_t)1<<3)) | + (PINB&(1<<1) ? 0 : ((matrix_row_t)1<<4)) | + (PINB&(1<<2) ? 0 : ((matrix_row_t)1<<5)) | + (PINB&(1<<3) ? 0 : ((matrix_row_t)1<<6)) | + (PINB&(1<<0) ? 0 : ((matrix_row_t)1<<7)) + ); +} + +static void select_col(uint8_t col) { + switch (col) { + case 0: PORTD = (PORTD & ~0b01111011) | 0b00011011; break; + case 1: PORTD = (PORTD & ~0b01111011) | 0b01000011; break; + case 2: PORTD = (PORTD & ~0b01111011) | 0b01101010; break; + case 3: PORTD = (PORTD & ~0b01111011) | 0b01111001; break; + case 4: PORTD = (PORTD & ~0b01111011) | 0b01100010; break; + case 5: PORTD = (PORTD & ~0b01111011) | 0b01110001; break; + case 6: PORTD = (PORTD & ~0b01111011) | 0b01100001; break; + case 7: PORTD = (PORTD & ~0b01111011) | 0b01110000; break; + case 8: PORTD = (PORTD & ~0b01111011) | 0b01100000; break; + case 9: PORTD = (PORTD & ~0b01111011) | 0b01101000; break; + case 10: PORTD = (PORTD & ~0b01111011) | 0b00101011; break; + case 11: PORTD = (PORTD & ~0b01111011) | 0b00110011; break; + case 12: PORTD = (PORTD & ~0b01111011) | 0b00100011; break; + case 13: PORTD = (PORTD & ~0b01111011) | 0b01111000; break; + case 14: PORTD = (PORTD & ~0b01111011) | 0b00010011; break; + case 15: PORTD = (PORTD & ~0b01111011) | 0b01101001; break; + case 16: PORTD = (PORTD & ~0b01111011) | 0b00001011; break; + case 17: PORTD = (PORTD & ~0b01111011) | 0b00111011; break; + } +} void matrix_init(void) { /* Row output pins */ @@ -82,57 +115,21 @@ inline matrix_row_t matrix_get_row(uint8_t row) { } void matrix_print(void) { - print("\nr\\c ABCDEFGHIJKLMNOPQR\n"); - for (uint8_t row = 0; row < MATRIX_ROWS; row++) { - matrix_row_t matrix_row = matrix_get_row(row); - xprintf("%02X: ", row); - for (uint8_t col = 0; col < MATRIX_COLS; col++) { - bool curr_bit = matrix_row & (1< Date: Sun, 19 Mar 2017 20:56:45 -0700 Subject: [PATCH 45/91] update docs --- keyboards/frosty_flake/readme.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/keyboards/frosty_flake/readme.md b/keyboards/frosty_flake/readme.md index a329650619..ef0e7492bf 100644 --- a/keyboards/frosty_flake/readme.md +++ b/keyboards/frosty_flake/readme.md @@ -1,6 +1,10 @@ frosty_flake keyboard firmware ====================== +This is the firmware for Rev. 20140521 of the Frosty Flake controller by [Bathroom Epiphanies](http://bathroomepiphanies.com/controllers/). + +The code was adapted from the [BathroomEpiphanies TMK Firmware](https://github.com/BathroomEpiphanies/epiphanies_tmk_keyboard/tree/master/be_controllers), but has been cleaned up to match the [schematic](https://deskthority.net/wiki/File:Frosty_Flake_Schematics.pdf) and gone through some minor refactoring for QMK. + ## Quantum MK Firmware For the full Quantum feature list, see [the parent readme](/). From a3a304db9ae09c3c5532c43e553cc24d3f9b29a2 Mon Sep 17 00:00:00 2001 From: Gabriel Young Date: Sun, 19 Mar 2017 21:11:17 -0700 Subject: [PATCH 46/91] clean up docs and provide defaults for keymap --- keyboards/frosty_flake/frosty_flake.c | 17 +++++++++ .../frosty_flake/keymaps/default/Makefile | 4 +- .../frosty_flake/keymaps/default/keymap.c | 38 +------------------ keyboards/frosty_flake/readme.md | 2 +- 4 files changed, 21 insertions(+), 40 deletions(-) diff --git a/keyboards/frosty_flake/frosty_flake.c b/keyboards/frosty_flake/frosty_flake.c index ed17361840..1cd4760389 100644 --- a/keyboards/frosty_flake/frosty_flake.c +++ b/keyboards/frosty_flake/frosty_flake.c @@ -44,3 +44,20 @@ void led_set_kb(uint8_t usb_led) { led_set_user(usb_led); } + +__attribute__ ((weak)) +void matrix_init_user(void) { +} + +__attribute__ ((weak)) +void matrix_scan_user(void) { +} + +__attribute__ ((weak)) +bool process_record_user(uint16_t keycode, keyrecord_t *record) { + return true; +} + +__attribute__ ((weak)) +void led_set_user(uint8_t usb_led) { +} \ No newline at end of file diff --git a/keyboards/frosty_flake/keymaps/default/Makefile b/keyboards/frosty_flake/keymaps/default/Makefile index 0887666802..9d3df5964f 100644 --- a/keyboards/frosty_flake/keymaps/default/Makefile +++ b/keyboards/frosty_flake/keymaps/default/Makefile @@ -3,9 +3,9 @@ # the appropriate keymap folder that will get included automatically # BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000) -MOUSEKEY_ENABLE = no # Mouse keys(+4700) +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 diff --git a/keyboards/frosty_flake/keymaps/default/keymap.c b/keyboards/frosty_flake/keymaps/default/keymap.c index 4383f7a8d7..4dc7ed655f 100644 --- a/keyboards/frosty_flake/keymaps/default/keymap.c +++ b/keyboards/frosty_flake/keymaps/default/keymap.c @@ -8,40 +8,4 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L,KC_SCLN,KC_QUOT, KC_ENT, KC_P4, KC_P5, KC_P6, \ KC_LSFT,KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M,KC_COMM, KC_DOT,KC_SLSH, KC_RSFT, KC_UP, KC_P1, KC_P2, KC_P3,KC_PENT, \ KC_LCTL,KC_LGUI,KC_LALT, KC_SPC, KC_RALT,KC_RGUI, KC_APP,KC_RCTL, KC_LEFT,KC_DOWN,KC_RGHT, KC_P0,KC_PDOT) -}; - -const uint16_t PROGMEM fn_actions[] = { - -}; - -const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) -{ - // MACRODOWN only works in this function - switch(id) { - case 0: - if (record->event.pressed) { - register_code(KC_RSFT); - } else { - unregister_code(KC_RSFT); - } - break; - } - return MACRO_NONE; -}; - - -void matrix_init_user(void) { - debug_enable = true; -} - -void matrix_scan_user(void) { - matrix_print(); -} - -bool process_record_user(uint16_t keycode, keyrecord_t *record) { - return true; -} - -void led_set_user(uint8_t usb_led) { - -} \ No newline at end of file +}; \ No newline at end of file diff --git a/keyboards/frosty_flake/readme.md b/keyboards/frosty_flake/readme.md index ef0e7492bf..ff440e33b6 100644 --- a/keyboards/frosty_flake/readme.md +++ b/keyboards/frosty_flake/readme.md @@ -1,7 +1,7 @@ frosty_flake keyboard firmware ====================== -This is the firmware for Rev. 20140521 of the Frosty Flake controller by [Bathroom Epiphanies](http://bathroomepiphanies.com/controllers/). +This is the firmware for Rev. 20140521 of the Frosty Flake controller by [Bathroom Epiphanies](http://bathroomepiphanies.com/controllers/), a replacement controller for the [Cooler Master Quick Fire Rapid](http://www.coolermaster.com/peripheral/keyboards/quickfirerapid/). The code was adapted from the [BathroomEpiphanies TMK Firmware](https://github.com/BathroomEpiphanies/epiphanies_tmk_keyboard/tree/master/be_controllers), but has been cleaned up to match the [schematic](https://deskthority.net/wiki/File:Frosty_Flake_Schematics.pdf) and gone through some minor refactoring for QMK. From b37f510f323b532360f38afb6f0bb29bc61eaab3 Mon Sep 17 00:00:00 2001 From: Gabriel Young Date: Sun, 19 Mar 2017 21:18:15 -0700 Subject: [PATCH 47/91] clean up config --- keyboards/frosty_flake/config.h | 30 ++++-------------------------- 1 file changed, 4 insertions(+), 26 deletions(-) diff --git a/keyboards/frosty_flake/config.h b/keyboards/frosty_flake/config.h index f03cecb3e6..2c73f10743 100644 --- a/keyboards/frosty_flake/config.h +++ b/keyboards/frosty_flake/config.h @@ -36,39 +36,17 @@ along with this program. If not, see . */ /* key matrix size */ -#define MATRIX_ROWS 8 -#define MATRIX_COLS 18 +#define MATRIX_ROWS 8 // Row0 - Row7 in the schematic +#define MATRIX_COLS 18 // ColA - ColR in the schematic /* * Keyboard Matrix Assignments - * - * Change this to how you wired your keyboard - * COLS: AVR pins used for columns, left to right - * ROWS: AVR pins used for rows, top to bottom - * DIODE_DIRECTION: COL2ROW = COL = Anode (+), ROW = Cathode (-, marked on diode) - * ROW2COL = ROW = Anode (+), COL = Cathode (-, marked on diode) - * -*/ -//#define MATRIX_ROW_PINS { D5, D4, D6, D2, D1, D0 } -//#define MATRIX_COL_PINS << n/a >> -//#define UNUSED_PINS { B0, C4, D3 } - -/* COL2ROW, ROW2COL, or CUSTOM_MATRIX */ -//#define DIODE_DIRECTION << n/a >> - -// #define BACKLIGHT_PIN B7 -// #define BACKLIGHT_BREATHING -// #define BACKLIGHT_LEVELS 3 - + */ +#define UNUSED_PINS { B0, C4, D3 } /* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */ #define DEBOUNCING_DELAY 5 -/* define if matrix has ghost (lacks anti-ghosting diodes) */ -//#define MATRIX_HAS_GHOST - -/* number of backlight levels */ - /* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */ #define LOCKING_SUPPORT_ENABLE /* Locking resynchronize hack */ From 3399e392977f91b1993e1ac581ff5a054a45848b Mon Sep 17 00:00:00 2001 From: Stephen Tudor Date: Mon, 20 Mar 2017 07:26:28 -0400 Subject: [PATCH 48/91] Fix shift tap-dance (can't use one-shot layer) --- keyboards/satan/keymaps/smt/Makefile | 3 +- keyboards/satan/keymaps/smt/keymap.c | 43 +++++++--------------------- 2 files changed, 12 insertions(+), 34 deletions(-) diff --git a/keyboards/satan/keymaps/smt/Makefile b/keyboards/satan/keymaps/smt/Makefile index 2a7ff27793..afcd025e13 100644 --- a/keyboards/satan/keymaps/smt/Makefile +++ b/keyboards/satan/keymaps/smt/Makefile @@ -8,13 +8,14 @@ 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 = yes # Enable keyboard backlight functionality +BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality MIDI_ENABLE = no # MIDI controls AUDIO_ENABLE = no # 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. SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend +TAP_DANCE_ENABLE = yes # Enable tap dance ifndef QUANTUM_DIR include ../../../../Makefile diff --git a/keyboards/satan/keymaps/smt/keymap.c b/keyboards/satan/keymaps/smt/keymap.c index 4ac016f212..7f9e9c2d50 100644 --- a/keyboards/satan/keymaps/smt/keymap.c +++ b/keyboards/satan/keymaps/smt/keymap.c @@ -20,6 +20,10 @@ enum planck_keycodes { DVORAK }; +enum { + TD_SHIFT_RAISE = 0 +}; + #define _______ KC_TRNS #define XXXXXXX KC_NO @@ -28,7 +32,7 @@ enum planck_keycodes { #define CTL_ESC CTL_T(KC_ESC) // Tap for Esc, hold for Ctrl #define HPR_TAB ALL_T(KC_TAB) // Tap for Tab, hold for Hyper (Super+Ctrl+Shift+Alt) #define SFT_ENT SFT_T(KC_ENT) // Tap for Enter, hold for Shift -#define SFT_RSE TD(KC_LSFT, OS(_RAISE)) // Double-tap for RAISE one-shot, otherwise Left Shift +#define SFT_RSE TD(TD_SHIFT_RAISE) // Double-tap for RAISE one-shot, otherwise Left Shift const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { /* Keymap _QWERTY: (Base Layer) Default Layer @@ -170,36 +174,9 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { return true; } -enum function_id { - SHIFT_ESC, +// Tap Dance Definitions +qk_tap_dance_action_t tap_dance_actions[] = { + // Tap/hold once for Shift, tap twice for raise layer + [TD_SHIFT_RAISE] = ACTION_TAP_DANCE_DOUBLE(KC_LSFT, _RAISE) +// Other declarations would go here, separated by commas, if you have them }; - -const uint16_t PROGMEM fn_actions[] = { - [0] = ACTION_FUNCTION(SHIFT_ESC), -}; - -void action_function(keyrecord_t *record, uint8_t id, uint8_t opt) { - static uint8_t shift_esc_shift_mask; - switch (id) { - case SHIFT_ESC: - shift_esc_shift_mask = get_mods()&MODS_CTRL_MASK; - if (record->event.pressed) { - if (shift_esc_shift_mask) { - add_key(KC_GRV); - send_keyboard_report(); - } else { - add_key(KC_ESC); - send_keyboard_report(); - } - } else { - if (shift_esc_shift_mask) { - del_key(KC_GRV); - send_keyboard_report(); - } else { - del_key(KC_ESC); - send_keyboard_report(); - } - } - break; - } -} From b10d95070831dde5801e930c615612dec3a6fd11 Mon Sep 17 00:00:00 2001 From: Stephen Tudor Date: Mon, 20 Mar 2017 07:43:24 -0400 Subject: [PATCH 49/91] Use normal backtick in ESC spot - I've mapped ESC to caps lock --- keyboards/satan/keymaps/smt/keymap.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/keyboards/satan/keymaps/smt/keymap.c b/keyboards/satan/keymaps/smt/keymap.c index 7f9e9c2d50..1a2bc97698 100644 --- a/keyboards/satan/keymaps/smt/keymap.c +++ b/keyboards/satan/keymaps/smt/keymap.c @@ -49,7 +49,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * `-----------------------------------------------------------' */ [_QWERTY] = KEYMAP_ANSI( - F(0), KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, \ + KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, \ HPR_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC,KC_BSLS, \ CTL_ESC, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN,KC_QUOT, KC_ENT, \ SFT_RSE, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM,KC_DOT, KC_SLSH, SFT_ENT, \ @@ -69,7 +69,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * `-----------------------------------------------------------' */ [_COLEMAK] = KEYMAP_ANSI( - F(0), KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, \ + KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, \ HPR_TAB, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN,KC_LBRC, KC_RBRC,KC_BSLS, \ CTL_ESC, KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O ,KC_QUOT, KC_ENT, \ SFT_RSE, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMM,KC_DOT, KC_SLSH, SFT_ENT, \ @@ -89,7 +89,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * `-----------------------------------------------------------' */ [_DVORAK] = KEYMAP_ANSI( - F(0), KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_LBRC, KC_RBRC,KC_BSPC, \ + KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_LBRC, KC_RBRC,KC_BSPC, \ HPR_TAB, KC_QUOT,KC_COMM,KC_DOT, KC_P, KC_Y, KC_F, KC_G, KC_C, KC_R, KC_L, KC_SLSH, KC_EQL, KC_BSLS, \ CTL_ESC, KC_A, KC_O, KC_E, KC_U, KC_I, KC_D, KC_H, KC_T, KC_N, KC_S, KC_MINS, KC_ENT, \ SFT_RSE, KC_SCLN,KC_Q, KC_J, KC_K, KC_X, KC_B, KC_M, KC_W, KC_V, KC_Z, SFT_ENT, \ @@ -109,7 +109,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * `-----------------------------------------------------------' */ [_LOWER] = KEYMAP_ANSI( - KC_GRV ,KC_F1 ,KC_F2 ,KC_F3 ,KC_F4 ,KC_F5 ,KC_F6 ,KC_F7 ,KC_F8 ,KC_F9 ,KC_F10 ,KC_F11 ,KC_F12 ,KC_DEL, \ + _______,KC_F1 ,KC_F2 ,KC_F3 ,KC_F4 ,KC_F5 ,KC_F6 ,KC_F7 ,KC_F8 ,KC_F9 ,KC_F10 ,KC_F11 ,KC_F12 ,KC_DEL, \ _______,KC_HOME,KC_UP ,KC_END ,_______,_______,_______,_______,_______,_______,_______,BL_DEC ,BL_INC ,BL_TOGG, \ _______,KC_LEFT,KC_DOWN,KC_RGHT,_______,_______,KC_LEFT,KC_DOWN,KC_UP ,KC_RGHT,KC_VOLU,KC_PGUP ,_______, \ KC_LSFT ,_______,_______,KC_MPRV,KC_MPLY,KC_MNXT,_______,_______,_______,KC_VOLD,KC_PGDN ,_______, \ From 34c5f8094e3a07dfff344f95b29407c9efaa0e4c Mon Sep 17 00:00:00 2001 From: Stephen Tudor Date: Mon, 20 Mar 2017 07:43:45 -0400 Subject: [PATCH 50/91] Remove tap-dance. Raise will be accessed via holding shift while lower is active --- keyboards/satan/keymaps/smt/Makefile | 1 - keyboards/satan/keymaps/smt/keymap.c | 32 ++++++++++------------------ 2 files changed, 11 insertions(+), 22 deletions(-) diff --git a/keyboards/satan/keymaps/smt/Makefile b/keyboards/satan/keymaps/smt/Makefile index afcd025e13..0c9ae824f6 100644 --- a/keyboards/satan/keymaps/smt/Makefile +++ b/keyboards/satan/keymaps/smt/Makefile @@ -15,7 +15,6 @@ 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. SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend -TAP_DANCE_ENABLE = yes # Enable tap dance ifndef QUANTUM_DIR include ../../../../Makefile diff --git a/keyboards/satan/keymaps/smt/keymap.c b/keyboards/satan/keymaps/smt/keymap.c index 1a2bc97698..a21d3eb864 100644 --- a/keyboards/satan/keymaps/smt/keymap.c +++ b/keyboards/satan/keymaps/smt/keymap.c @@ -17,11 +17,9 @@ enum planck_keycodes { QWERTY = SAFE_RANGE, COLEMAK, - DVORAK -}; - -enum { - TD_SHIFT_RAISE = 0 + DVORAK, + LOWER, + RAISE }; #define _______ KC_TRNS @@ -32,7 +30,6 @@ enum { #define CTL_ESC CTL_T(KC_ESC) // Tap for Esc, hold for Ctrl #define HPR_TAB ALL_T(KC_TAB) // Tap for Tab, hold for Hyper (Super+Ctrl+Shift+Alt) #define SFT_ENT SFT_T(KC_ENT) // Tap for Enter, hold for Shift -#define SFT_RSE TD(TD_SHIFT_RAISE) // Double-tap for RAISE one-shot, otherwise Left Shift const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { /* Keymap _QWERTY: (Base Layer) Default Layer @@ -52,7 +49,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, \ HPR_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC,KC_BSLS, \ CTL_ESC, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN,KC_QUOT, KC_ENT, \ - SFT_RSE, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM,KC_DOT, KC_SLSH, SFT_ENT, \ + KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM,KC_DOT, KC_SLSH, SFT_ENT, \ KC_LCTL, KC_LGUI,KC_LALT, KC_SPC, KC_RALT,KC_RGUI,MO(_LOWER),KC_RCTL), /* Keymap _COLEMAK: (Base Layer) Default Layer @@ -72,7 +69,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, \ HPR_TAB, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN,KC_LBRC, KC_RBRC,KC_BSLS, \ CTL_ESC, KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O ,KC_QUOT, KC_ENT, \ - SFT_RSE, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMM,KC_DOT, KC_SLSH, SFT_ENT, \ + KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMM,KC_DOT, KC_SLSH, SFT_ENT, \ KC_LCTL, KC_LGUI,KC_LALT, KC_SPC, KC_RALT,KC_RGUI,MO(_LOWER),KC_RCTL), /* Keymap _DVORAK: (Base Layer) Default Layer @@ -92,7 +89,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_LBRC, KC_RBRC,KC_BSPC, \ HPR_TAB, KC_QUOT,KC_COMM,KC_DOT, KC_P, KC_Y, KC_F, KC_G, KC_C, KC_R, KC_L, KC_SLSH, KC_EQL, KC_BSLS, \ CTL_ESC, KC_A, KC_O, KC_E, KC_U, KC_I, KC_D, KC_H, KC_T, KC_N, KC_S, KC_MINS, KC_ENT, \ - SFT_RSE, KC_SCLN,KC_Q, KC_J, KC_K, KC_X, KC_B, KC_M, KC_W, KC_V, KC_Z, SFT_ENT, \ + KC_LSFT, KC_SCLN,KC_Q, KC_J, KC_K, KC_X, KC_B, KC_M, KC_W, KC_V, KC_Z, SFT_ENT, \ KC_LCTL, KC_LGUI,KC_LALT, KC_SPC, KC_RALT,KC_RGUI,MO(_LOWER),KC_RCTL), /* Keymap _LOWER: Function Layer @@ -112,7 +109,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { _______,KC_F1 ,KC_F2 ,KC_F3 ,KC_F4 ,KC_F5 ,KC_F6 ,KC_F7 ,KC_F8 ,KC_F9 ,KC_F10 ,KC_F11 ,KC_F12 ,KC_DEL, \ _______,KC_HOME,KC_UP ,KC_END ,_______,_______,_______,_______,_______,_______,_______,BL_DEC ,BL_INC ,BL_TOGG, \ _______,KC_LEFT,KC_DOWN,KC_RGHT,_______,_______,KC_LEFT,KC_DOWN,KC_UP ,KC_RGHT,KC_VOLU,KC_PGUP ,_______, \ - KC_LSFT ,_______,_______,KC_MPRV,KC_MPLY,KC_MNXT,_______,_______,_______,KC_VOLD,KC_PGDN ,_______, \ + RAISE ,_______,_______,KC_MPRV,KC_MPLY,KC_MNXT,_______,_______,_______,KC_VOLD,KC_PGDN ,_______, \ _______,_______,_______ ,_______ ,_______,_______,_______,_______), /* Keymap _RAISE: Function Layer @@ -133,14 +130,14 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { _______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,RESET , \ _______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______, \ _______,_______,_______,_______,_______,_______,_______,QWERTY ,COLEMAK,DVORAK ,_______,_______ ,_______, \ - KC_LSFT ,RGB_TOG,RGB_MOD,RGB_HUI,RGB_HUD,RGB_SAI,RGB_SAD,RGB_VAI,RGB_VAD,_______,_______ ,_______, \ - _______,_______,_______ ,_______ ,_______,_______,XXXXXXX,_______ + _______ ,RGB_TOG,RGB_MOD,RGB_HUI,RGB_HUD,RGB_SAI,RGB_SAD,RGB_VAI,RGB_VAD,_______,_______ ,_______, \ + _______,_______,_______ ,_______ ,_______,_______,_______,_______ #else _______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,RESET , \ _______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______, \ _______,_______,_______,_______,_______,_______,_______,QWERTY ,COLEMAK,DVORAK ,_______,_______ ,_______, \ - KC_LSFT ,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______ ,_______, \ - _______,_______,_______ ,_______ ,_______,_______,XXXXXXX,_______ + _______ ,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______ ,_______, \ + _______,_______,_______ ,_______ ,_______,_______,_______,_______ #endif ) }; @@ -173,10 +170,3 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { } return true; } - -// Tap Dance Definitions -qk_tap_dance_action_t tap_dance_actions[] = { - // Tap/hold once for Shift, tap twice for raise layer - [TD_SHIFT_RAISE] = ACTION_TAP_DANCE_DOUBLE(KC_LSFT, _RAISE) -// Other declarations would go here, separated by commas, if you have them -}; From d7f2bd29646c585434a8f19e7b9df0d3a6ea7bef Mon Sep 17 00:00:00 2001 From: Dylan Khor Date: Mon, 20 Mar 2017 13:14:48 -0400 Subject: [PATCH 51/91] add pgup, pgdn, home, end --- keyboards/planck/keymaps/khord/keymap.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/keyboards/planck/keymaps/khord/keymap.c b/keyboards/planck/keymaps/khord/keymap.c index 6f19966f25..b6adb603e9 100644 --- a/keyboards/planck/keymaps/khord/keymap.c +++ b/keyboards/planck/keymaps/khord/keymap.c @@ -112,7 +112,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * |------+------+------+------+------+-------------+------+------+------+------+------| * | Del | F1 | F2 | F3 | F4 | F5 | F6 | _ | + | { | } | | | * |------+------+------+------+------+------|------+------+------+------+------+------| - * | | F7 | F8 | F9 | F10 | F11 | F12 |ISO ~ |ISO | | | |Enter | + * | | F7 | F8 | F9 | F10 | F11 | F12 |ISO ~ |ISO | | END | HOME |Enter | * |------+------+------+------+------+------+------+------+------+------+------+------| * | | | | | | | | Next | Vol- | Vol+ | Play | * `-----------------------------------------------------------------------------------' @@ -120,7 +120,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { [_LOWER] = { {KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_BSPC}, {KC_DEL, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE}, - {_______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12,S(KC_NUHS),S(KC_NUBS),_______, _______, _______}, + {_______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12,S(KC_NUHS),S(KC_NUBS),KC_END, KC_HOME, _______}, {_______, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY} }, @@ -130,7 +130,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * |------+------+------+------+------+-------------+------+------+------+------+------| * | Del | F1 | F2 | F3 | F4 | F5 | F6 | - | = | [ | ] | \ | * |------+------+------+------+------+------|------+------+------+------+------+------| - * | | F7 | F8 | F9 | F10 | F11 | F12 |ISO # |ISO / | | |Enter | + * | | F7 | F8 | F9 | F10 | F11 | F12 |ISO # |ISO / |PG DN |PG UP |Enter | * |------+------+------+------+------+------+------+------+------+------+------+------| * | | | | | | | | Next | Vol- | Vol+ | Play | * `-----------------------------------------------------------------------------------' @@ -138,7 +138,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { [_RAISE] = { {KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC}, {KC_DEL, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS}, - {_______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_NUHS, KC_NUBS, _______, _______, _______}, + {_______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_NUHS, KC_NUBS, KC_PGDN, KC_PGUP, _______}, {_______, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY} }, From dce3847ebb900ffebd9038da255309cbac634170 Mon Sep 17 00:00:00 2001 From: Stephen Tudor Date: Mon, 20 Mar 2017 14:12:43 -0400 Subject: [PATCH 52/91] Use single _FUNC layer. Move RESET and base layout-changing keys to _FUNC. --- keyboards/satan/keymaps/smt/keymap.c | 55 ++++++---------------------- 1 file changed, 12 insertions(+), 43 deletions(-) diff --git a/keyboards/satan/keymaps/smt/keymap.c b/keyboards/satan/keymaps/smt/keymap.c index a21d3eb864..d90849914e 100644 --- a/keyboards/satan/keymaps/smt/keymap.c +++ b/keyboards/satan/keymaps/smt/keymap.c @@ -11,15 +11,12 @@ #define _QWERTY 0 #define _COLEMAK 1 #define _DVORAK 2 -#define _LOWER 3 -#define _RAISE 4 +#define _FUNC 3 enum planck_keycodes { QWERTY = SAFE_RANGE, COLEMAK, - DVORAK, - LOWER, - RAISE + DVORAK }; #define _______ KC_TRNS @@ -50,7 +47,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { HPR_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC,KC_BSLS, \ CTL_ESC, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN,KC_QUOT, KC_ENT, \ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM,KC_DOT, KC_SLSH, SFT_ENT, \ - KC_LCTL, KC_LGUI,KC_LALT, KC_SPC, KC_RALT,KC_RGUI,MO(_LOWER),KC_RCTL), + KC_LCTL, KC_LGUI,KC_LALT, KC_SPC, KC_RALT,KC_RGUI,MO(_FUNC),KC_RCTL), /* Keymap _COLEMAK: (Base Layer) Default Layer * ,-----------------------------------------------------------. @@ -70,7 +67,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { HPR_TAB, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN,KC_LBRC, KC_RBRC,KC_BSLS, \ CTL_ESC, KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O ,KC_QUOT, KC_ENT, \ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMM,KC_DOT, KC_SLSH, SFT_ENT, \ - KC_LCTL, KC_LGUI,KC_LALT, KC_SPC, KC_RALT,KC_RGUI,MO(_LOWER),KC_RCTL), + KC_LCTL, KC_LGUI,KC_LALT, KC_SPC, KC_RALT,KC_RGUI,MO(_FUNC),KC_RCTL), /* Keymap _DVORAK: (Base Layer) Default Layer * ,-----------------------------------------------------------. @@ -90,55 +87,27 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { HPR_TAB, KC_QUOT,KC_COMM,KC_DOT, KC_P, KC_Y, KC_F, KC_G, KC_C, KC_R, KC_L, KC_SLSH, KC_EQL, KC_BSLS, \ CTL_ESC, KC_A, KC_O, KC_E, KC_U, KC_I, KC_D, KC_H, KC_T, KC_N, KC_S, KC_MINS, KC_ENT, \ KC_LSFT, KC_SCLN,KC_Q, KC_J, KC_K, KC_X, KC_B, KC_M, KC_W, KC_V, KC_Z, SFT_ENT, \ - KC_LCTL, KC_LGUI,KC_LALT, KC_SPC, KC_RALT,KC_RGUI,MO(_LOWER),KC_RCTL), + KC_LCTL, KC_LGUI,KC_LALT, KC_SPC, KC_RALT,KC_RGUI,MO(_FUNC),KC_RCTL), - /* Keymap _LOWER: Function Layer + /* Keymap _FUNC: Function Layer * ,-----------------------------------------------------------. * | | F1| F2| F3| F4| F5| F6| F7| F8| F9|F10|F11|F12|Delete | * |-----------------------------------------------------------| - * | |Hom| UP|End| | | | | | | |BL-|BL+|BL | + * | |Hom| UP|End| | | |Qwt|Cmk|Dvk| |BL-|BL+|BL | * |-----------------------------------------------------------| * | |LFT| DN| RT| | |LFT| DN| UP| RT|Vo+|Pg+| | * |-----------------------------------------------------------| * | | | |Prv|Ply|Nxt| | | |Vo-|Pg-| | * |-----------------------------------------------------------| - * | | | | | | | | | + * |RESET| | | | | | | | * `-----------------------------------------------------------' */ -[_LOWER] = KEYMAP_ANSI( +[_FUNC] = KEYMAP_ANSI( _______,KC_F1 ,KC_F2 ,KC_F3 ,KC_F4 ,KC_F5 ,KC_F6 ,KC_F7 ,KC_F8 ,KC_F9 ,KC_F10 ,KC_F11 ,KC_F12 ,KC_DEL, \ - _______,KC_HOME,KC_UP ,KC_END ,_______,_______,_______,_______,_______,_______,_______,BL_DEC ,BL_INC ,BL_TOGG, \ + _______,KC_HOME,KC_UP ,KC_END ,_______,_______,_______,QWERTY ,COLEMAK,DVORAK ,_______,BL_DEC ,BL_INC ,BL_TOGG, \ _______,KC_LEFT,KC_DOWN,KC_RGHT,_______,_______,KC_LEFT,KC_DOWN,KC_UP ,KC_RGHT,KC_VOLU,KC_PGUP ,_______, \ - RAISE ,_______,_______,KC_MPRV,KC_MPLY,KC_MNXT,_______,_______,_______,KC_VOLD,KC_PGDN ,_______, \ - _______,_______,_______ ,_______ ,_______,_______,_______,_______), - - /* Keymap _RAISE: Function Layer - * ,-----------------------------------------------------------. - * | | | | | | | | | | | | | | RESET | - * |-----------------------------------------------------------| - * | | | | | | | | | | | |BL-|BL+|BL | - * |-----------------------------------------------------------| - * | | | | | | | |QWT|CLM|DVK| | | | - * |-----------------------------------------------------------| - * | | F1|F2 | F3|F4 | F5| F6| F7| F8| | | | - * |-----------------------------------------------------------| - * | | | | | | | | | - * `-----------------------------------------------------------' - */ -[_RAISE] = KEYMAP_ANSI( - #ifdef RGBLIGHT_ENABLE - _______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,RESET , \ - _______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______, \ - _______,_______,_______,_______,_______,_______,_______,QWERTY ,COLEMAK,DVORAK ,_______,_______ ,_______, \ - _______ ,RGB_TOG,RGB_MOD,RGB_HUI,RGB_HUD,RGB_SAI,RGB_SAD,RGB_VAI,RGB_VAD,_______,_______ ,_______, \ - _______,_______,_______ ,_______ ,_______,_______,_______,_______ - #else - _______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,RESET , \ - _______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______, \ - _______,_______,_______,_______,_______,_______,_______,QWERTY ,COLEMAK,DVORAK ,_______,_______ ,_______, \ - _______ ,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______ ,_______, \ - _______,_______,_______ ,_______ ,_______,_______,_______,_______ - #endif + _______ ,_______,_______,KC_MPRV,KC_MPLY,KC_MNXT,_______,_______,_______,KC_VOLD,KC_PGDN ,_______, \ + RESET ,_______,_______ ,_______ ,_______,_______,_______,_______ ) }; From f0962bce505a7643abbd169868820715b86f97b7 Mon Sep 17 00:00:00 2001 From: ishtob Date: Wed, 22 Mar 2017 14:55:13 -0400 Subject: [PATCH 53/91] Add files via upload --- .../lets_split/keymaps/OLED_sample/Makefile | 25 ++ .../lets_split/keymaps/OLED_sample/config.h | 45 +++ .../lets_split/keymaps/OLED_sample/keymap.c | 356 ++++++++++++++++++ 3 files changed, 426 insertions(+) create mode 100644 keyboards/lets_split/keymaps/OLED_sample/Makefile create mode 100644 keyboards/lets_split/keymaps/OLED_sample/config.h create mode 100644 keyboards/lets_split/keymaps/OLED_sample/keymap.c diff --git a/keyboards/lets_split/keymaps/OLED_sample/Makefile b/keyboards/lets_split/keymaps/OLED_sample/Makefile new file mode 100644 index 0000000000..90616d1f19 --- /dev/null +++ b/keyboards/lets_split/keymaps/OLED_sample/Makefile @@ -0,0 +1,25 @@ + +# Build Options +# change to "no" to disable the options, or define them in the Makefile in +# the appropriate keymap folder that will get included automatically +# +BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000) +MOUSEKEY_ENABLE = yes # Mouse keys(+4700) +EXTRAKEY_ENABLE = yes # Audio control and System control(+450) +CONSOLE_ENABLE = no # Console for debug(+400) +COMMAND_ENABLE = no # 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 +MIDI_ENABLE = no # MIDI controls +AUDIO_ENABLE = no # Audio output on port C6 +UNICODE_ENABLE = no # Unicode +BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID +RGBLIGHT_ENABLE = yes # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. +ONEHAND_ENABLE = no # Enable one-hand typing + +# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE +SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend + +ifndef QUANTUM_DIR + include ../../../../Makefile +endif \ No newline at end of file diff --git a/keyboards/lets_split/keymaps/OLED_sample/config.h b/keyboards/lets_split/keymaps/OLED_sample/config.h new file mode 100644 index 0000000000..353ea368c6 --- /dev/null +++ b/keyboards/lets_split/keymaps/OLED_sample/config.h @@ -0,0 +1,45 @@ +/* +Copyright 2012 Jun Wako + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 2 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see . +*/ + +#define USE_I2C +//#define USE_SERIAL +//#define MASTER_RIGHT +#define FLIP_HALF + +#define SSD1306OLED + + +#define PREVENT_STUCK_MODIFIERS +#define TAPPING_FORCE_HOLD +#define TAPPING_TERM 100 + +#undef RGBLED_NUM +#define RGBLIGHT_ANIMATIONS +#define RGBLED_NUM 6 +#define RGBLIGHT_HUE_STEP 10 +#define RGBLIGHT_SAT_STEP 17 +#define RGBLIGHT_VAL_STEP 17 + + + + +#ifdef SUBPROJECT_rev1 + #include "../../rev1/config.h" +#endif +#ifdef SUBPROJECT_rev2 + #include "../../rev2/config.h" +#endif \ No newline at end of file diff --git a/keyboards/lets_split/keymaps/OLED_sample/keymap.c b/keyboards/lets_split/keymaps/OLED_sample/keymap.c new file mode 100644 index 0000000000..072b825abe --- /dev/null +++ b/keyboards/lets_split/keymaps/OLED_sample/keymap.c @@ -0,0 +1,356 @@ +#include "lets_split.h" +#include "bootloader.h" +#include "action_layer.h" +#include "eeconfig.h" +#include "tmk_core/protocol/lufa/LUFA-git/LUFA/Drivers/Peripheral/TWI.h" +#ifdef AUDIO_ENABLE + #include "audio.h" +#endif + +extern keymap_config_t keymap_config; + +//Following line allows macro to read current RGB settings +extern rgblight_config_t rgblight_config; + + +// Each layer gets a name for readability, which is then used in the keymap matrix below. +// The underscores don't mean anything - you can have a layer called STUFF or any other name. +// Layer names don't all need to be of the same length, obviously, and you can also skip them +// entirely and just use numbers. +#define _QWERTY 0 +#define _COLEMAK 1 +#define _DVORAK 2 +#define _LOWER 3 +#define _RAISE 4 +#define _ADJUST 16 + +enum custom_keycodes { + QWERTY = SAFE_RANGE, + COLEMAK, + DVORAK, + LOWER, + RAISE, + ADJUST, + BACKLIT, + RGBLED_TOGGLE, + RGBLED_STEP_MODE, + RGBLED_INCREASE_HUE, + RGBLED_DECREASE_HUE, + RGBLED_INCREASE_SAT, + RGBLED_DECREASE_SAT, + RGBLED_INCREASE_VAL, + RGBLED_DECREASE_VAL, +}; + +enum macro_keycodes { + KC_SAMPLEMACRO, +}; + + +// Fillers to make layering more clear +#define _______ KC_TRNS +#define XXXXXXX KC_NO +//Macros +#define M_SAMPLE M(KC_SAMPLEMACRO) + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + +/* Qwerty + * ,-----------------------------------------------------------------------------------. + * | Tab | Q | W | E | R | T | Y | U | I | O | P | Bksp | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | Esc | A | S | D | F | G | H | J | K | L | ; | " | + * |------+------+------+------+------+------|------+------+------+------+------+------| + * | Shift| Z | X | C | V | B | N | M | , | . | / |Enter | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * |Adjust| Ctrl | Alt | GUI |Lower |Space |Space |Raise | Left | Down | Up |Right | + * `-----------------------------------------------------------------------------------' + */ +[_QWERTY] = KEYMAP( \ + KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC, \ + KC_ESC, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, \ + KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT , \ + ADJUST, KC_LCTL, KC_LALT, KC_LGUI, LOWER, KC_SPC, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT \ +), + +/* Colemak + * ,-----------------------------------------------------------------------------------. + * | Tab | Q | W | F | P | G | J | L | U | Y | ; | Bksp | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | Esc | A | R | S | T | D | H | N | E | I | O | " | + * |------+------+------+------+------+------|------+------+------+------+------+------| + * | Shift| Z | X | C | V | B | K | M | , | . | / |Enter | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * |Adjust| Ctrl | Alt | GUI |Lower |Space |Space |Raise | Left | Down | Up |Right | + * `-----------------------------------------------------------------------------------' + */ +[_COLEMAK] = KEYMAP( \ + KC_TAB, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_BSPC, \ + KC_ESC, KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O, KC_QUOT, \ + KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT , \ + ADJUST, KC_LCTL, KC_LALT, KC_LGUI, LOWER, KC_SPC, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT \ +), + +/* Dvorak + * ,-----------------------------------------------------------------------------------. + * | Tab | " | , | . | P | Y | F | G | C | R | L | Bksp | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | Esc | A | O | E | U | I | D | H | T | N | S | / | + * |------+------+------+------+------+------|------+------+------+------+------+------| + * | Shift| ; | Q | J | K | X | B | M | W | V | Z |Enter | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * |Adjust| Ctrl | Alt | GUI |Lower |Space |Space |Raise | Left | Down | Up |Right | + * `-----------------------------------------------------------------------------------' + */ +[_DVORAK] = KEYMAP( \ + KC_TAB, KC_QUOT, KC_COMM, KC_DOT, KC_P, KC_Y, KC_F, KC_G, KC_C, KC_R, KC_L, KC_BSPC, \ + KC_ESC, KC_A, KC_O, KC_E, KC_U, KC_I, KC_D, KC_H, KC_T, KC_N, KC_S, KC_SLSH, \ + KC_LSFT, KC_SCLN, KC_Q, KC_J, KC_K, KC_X, KC_B, KC_M, KC_W, KC_V, KC_Z, KC_ENT , \ + ADJUST, KC_LCTL, KC_LALT, KC_LGUI, LOWER, KC_SPC, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT \ +), + +/* Lower + * ,-----------------------------------------------------------------------------------. + * | ~ | ! | @ | # | $ | % | ^ | & | * | ( | ) | Bksp | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | Del | F1 | F2 | F3 | F4 | F5 | F6 | _ | + | | \ | | | + * |------+------+------+------+------+------|------+------+------+------+------+------| + * | | F7 | F8 | F9 | F10 | F11 | F12 |ISO ~ |ISO | | | |Enter | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | | | | | | | | Next | Vol- | Vol+ | Play | + * `-----------------------------------------------------------------------------------' + */ +[_LOWER] = KEYMAP( \ + KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_BSPC, \ + KC_DEL, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE, \ + _______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12,S(KC_NUHS),S(KC_NUBS),_______, _______, _______, \ + _______, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY \ +), + +/* Raise + * ,-----------------------------------------------------------------------------------. + * | ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Bksp | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | Del | F1 | F2 | F3 | F4 | F5 | F6 | - | = | [ | ] | \ | + * |------+------+------+------+------+------|------+------+------+------+------+------| + * | | F7 | F8 | F9 | F10 | F11 | F12 |ISO # |ISO / | | |Enter | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | | | | | | | | Next | Vol- | Vol+ | Play | + * `-----------------------------------------------------------------------------------' + */ +[_RAISE] = KEYMAP( \ + KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC, \ + KC_DEL, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS, \ + _______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_NUHS, KC_NUBS, _______, _______, _______, \ + _______, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY \ +), + +/* Adjust (Lower + Raise) + * ,-----------------------------------------------------------------------------------. + * | | Reset| | | | | | | | | | Del | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | | | |Aud on|Audoff|AGnorm|AGswap|Qwerty|Colemk|Dvorak| | | + * |------+------+------+------+------+------|------+------+------+------+------+------| + * | | | | | | | | | | | | | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | | | | | | | | | | | | + * `-----------------------------------------------------------------------------------' + */ +[_ADJUST] = KEYMAP( \ + _______, RESET, _______, M_SAMPLE, _______, _______, _______, _______, _______, _______, _______, KC_DEL, \ + _______, _______, _______, AU_ON, AU_OFF, AG_NORM, AG_SWAP, QWERTY, COLEMAK, DVORAK, _______, _______, \ + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \ + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ \ +) + + +}; + + +#ifdef AUDIO_ENABLE + +float tone_startup[][2] = SONG(STARTUP_SOUND); +float tone_qwerty[][2] = SONG(QWERTY_SOUND); +float tone_dvorak[][2] = SONG(DVORAK_SOUND); +float tone_colemak[][2] = SONG(COLEMAK_SOUND); +float tone_plover[][2] = SONG(PLOVER_SOUND); +float tone_plover_gb[][2] = SONG(PLOVER_GOODBYE_SOUND); +float music_scale[][2] = SONG(MUSIC_SCALE_SOUND); +float tone_goodbye[][2] = SONG(GOODBYE_SOUND); +#endif + +// define variables for reactive RGB +bool TOG_STATUS = false; +int RGB_current_mode; + +void persistant_default_layer_set(uint16_t default_layer) { + eeconfig_update_default_layer(default_layer); + default_layer_set(default_layer); +} + +// Setting ADJUST layer RGB back to default +void update_tri_layer_RGB(uint8_t layer1, uint8_t layer2, uint8_t layer3) { + if (IS_LAYER_ON(layer1) && IS_LAYER_ON(layer2)) { + rgblight_mode(RGB_current_mode); + layer_on(layer3); + } else { + layer_off(layer3); + } +} + +bool process_record_user(uint16_t keycode, keyrecord_t *record) { + switch (keycode) { + case QWERTY: + if (record->event.pressed) { + #ifdef AUDIO_ENABLE + PLAY_NOTE_ARRAY(tone_qwerty, false, 0); + #endif + persistant_default_layer_set(1UL<<_QWERTY); + } + return false; + break; + case COLEMAK: + if (record->event.pressed) { + #ifdef AUDIO_ENABLE + PLAY_NOTE_ARRAY(tone_colemak, false, 0); + #endif + persistant_default_layer_set(1UL<<_COLEMAK); + } + return false; + break; + case DVORAK: + if (record->event.pressed) { + #ifdef AUDIO_ENABLE + PLAY_NOTE_ARRAY(tone_dvorak, false, 0); + #endif + persistant_default_layer_set(1UL<<_DVORAK); + } + return false; + break; + case LOWER: + if (record->event.pressed) { + //not sure how to have keyboard check mode and set it to a variable, so my work around + //uses another variable that would be set to true after the first time a reactive key is pressed. + if (TOG_STATUS) { //TOG_STATUS checks is another reactive key currently pressed, only changes RGB mode if returns false + } else { + TOG_STATUS = !TOG_STATUS; + rgblight_mode(16); + } + layer_on(_LOWER); + update_tri_layer_RGB(_LOWER, _RAISE, _ADJUST); + } else { + rgblight_mode(RGB_current_mode); // revert RGB to initial mode prior to RGB mode change + TOG_STATUS = false; + layer_off(_LOWER); + update_tri_layer_RGB(_LOWER, _RAISE, _ADJUST); + } + return false; + break; + case RAISE: + if (record->event.pressed) { + //not sure how to have keyboard check mode and set it to a variable, so my work around + //uses another variable that would be set to true after the first time a reactive key is pressed. + if (TOG_STATUS) { //TOG_STATUS checks is another reactive key currently pressed, only changes RGB mode if returns false + } else { + TOG_STATUS = !TOG_STATUS; + rgblight_mode(15); + } + layer_on(_RAISE); + update_tri_layer_RGB(_LOWER, _RAISE, _ADJUST); + } else { + rgblight_mode(RGB_current_mode); // revert RGB to initial mode prior to RGB mode change + layer_off(_RAISE); + TOG_STATUS = false; + update_tri_layer_RGB(_LOWER, _RAISE, _ADJUST); + } + return false; + break; + case BACKLIT: + if (record->event.pressed) { + register_code(KC_RSFT); + #ifdef BACKLIGHT_ENABLE + backlight_step(); + #endif + } else { + unregister_code(KC_RSFT); + } + return false; + break; + //led operations - RGB mode change now updates the RGB_current_mode to allow the right RGB mode to be set after reactive keys are released + case RGB_MOD: + if (record->event.pressed) { + rgblight_mode(RGB_current_mode); + rgblight_step(); + RGB_current_mode = rgblight_config.mode; + } + return false; + break; + } + return true; +} + +void matrix_init_user(void) { + #ifdef AUDIO_ENABLE + startup_user(); + #endif + RGB_current_mode = rgblight_config.mode; +} + +//SSD1306 OLED init and update loop, make sure to add #define SSD1306OLED in config.h +#ifdef SSD1306OLED +void matrix_master_OLED_init (void) { + TWI_Init(TWI_BIT_PRESCALE_1, TWI_BITLENGTH_FROM_FREQ(1, 800000)); + iota_gfx_init(); // turns on the display +} + +void matrix_scan_user(void) { + iota_gfx_task(); // this is what updates the display continuously +} +#endif + +#ifdef AUDIO_ENABLE + +void startup_user() +{ + _delay_ms(20); // gets rid of tick + PLAY_NOTE_ARRAY(tone_startup, false, 0); +} + +void shutdown_user() +{ + PLAY_NOTE_ARRAY(tone_goodbye, false, 0); + _delay_ms(150); + stop_all_notes(); +} + +void music_on_user(void) +{ + music_scale_user(); +} + +void music_scale_user(void) +{ + PLAY_NOTE_ARRAY(music_scale, false, 0); +} + +#endif + +/* + * Macro definition + */ +const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) +{ + if (!eeconfig_is_enabled()) { + eeconfig_init(); + } + + switch (id) { + case KC_SAMPLEMACRO: + if (record->event.pressed){ + return MACRO (I(10), T(H), T(E), T(L), T(L), T(O), T(SPACE), T(W), T(O), T(R), T(L), T(D), END); + } + + } + + return MACRO_NONE; +} From dfb5a0e8f413338363138dd6beb1701563e1021d Mon Sep 17 00:00:00 2001 From: ishtob Date: Wed, 22 Mar 2017 14:59:20 -0400 Subject: [PATCH 54/91] Delete Makefile --- keyboards/lets_split/rev2fliphalf/Makefile | 3 --- 1 file changed, 3 deletions(-) delete mode 100644 keyboards/lets_split/rev2fliphalf/Makefile diff --git a/keyboards/lets_split/rev2fliphalf/Makefile b/keyboards/lets_split/rev2fliphalf/Makefile deleted file mode 100644 index 4e2a6f00fd..0000000000 --- a/keyboards/lets_split/rev2fliphalf/Makefile +++ /dev/null @@ -1,3 +0,0 @@ -ifndef MAKEFILE_INCLUDED - include ../../Makefile -endif \ No newline at end of file From 6167d7937c15f7fb68f50a48ce34df858f24d80f Mon Sep 17 00:00:00 2001 From: ishtob Date: Wed, 22 Mar 2017 14:59:32 -0400 Subject: [PATCH 55/91] Delete config.h --- keyboards/lets_split/rev2fliphalf/config.h | 91 ---------------------- 1 file changed, 91 deletions(-) delete mode 100644 keyboards/lets_split/rev2fliphalf/config.h diff --git a/keyboards/lets_split/rev2fliphalf/config.h b/keyboards/lets_split/rev2fliphalf/config.h deleted file mode 100644 index 1c45cf136b..0000000000 --- a/keyboards/lets_split/rev2fliphalf/config.h +++ /dev/null @@ -1,91 +0,0 @@ -/* -Copyright 2012 Jun Wako - -This program is free software: you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation, either version 2 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program. If not, see . -*/ - -#ifndef CONFIG_H -#define CONFIG_H - -#include "config_common.h" - -/* USB Device descriptor parameter */ -#define VENDOR_ID 0xFEED -#define PRODUCT_ID 0x3060 -#define DEVICE_VER 0x0001 -#define MANUFACTURER Wootpatoot -#define PRODUCT Lets Split v2 -#define DESCRIPTION A split keyboard for the cheap makers - -/* key matrix size */ -// Rows are doubled-up -#define MATRIX_ROWS 8 -#define MATRIX_COLS 6 - -// wiring of each half -#define MATRIX_ROW_PINS { D7, E6, B4, B5 } -//#define MATRIX_COL_PINS { F6, F7, B1, B3, B2, B6 } -#define MATRIX_COL_PINS { B6, B2, B3, B1, F7, F6 } //uncomment this line and comment line above if you need to reverse left-to-right key order - -//#define CATERINA_BOOTLOADER - -/* COL2ROW or ROW2COL */ -#define DIODE_DIRECTION COL2ROW - -/* define if matrix has ghost */ -//#define MATRIX_HAS_GHOST - -/* number of backlight levels */ -// #define BACKLIGHT_LEVELS 3 - -/* Set 0 if debouncing isn't needed */ -#define DEBOUNCING_DELAY 5 - -/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */ -#define LOCKING_SUPPORT_ENABLE -/* Locking resynchronize hack */ -#define LOCKING_RESYNC_ENABLE - -/* key combination for command */ -#define IS_COMMAND() ( \ - keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \ -) - -/* ws2812 RGB LED */ -#define RGB_DI_PIN D3 -#define RGBLIGHT_TIMER -#define RGBLED_NUM 12 // Number of LEDs -#define ws2812_PORTREG PORTD -#define ws2812_DDRREG DDRD - -/* - * Feature disable options - * These options are also useful to firmware size reduction. - */ - -/* disable debug print */ -// #define NO_DEBUG - -/* disable print */ -// #define NO_PRINT - -/* disable action features */ -//#define NO_ACTION_LAYER -//#define NO_ACTION_TAPPING -//#define NO_ACTION_ONESHOT -//#define NO_ACTION_MACRO -//#define NO_ACTION_FUNCTION - - -#endif \ No newline at end of file From d012b0110811595bed92d3a281ccc5480d0a4a86 Mon Sep 17 00:00:00 2001 From: ishtob Date: Wed, 22 Mar 2017 14:59:42 -0400 Subject: [PATCH 56/91] Delete rev2fliphalf.c --- .../lets_split/rev2fliphalf/rev2fliphalf.c | 32 ------------------- 1 file changed, 32 deletions(-) delete mode 100644 keyboards/lets_split/rev2fliphalf/rev2fliphalf.c diff --git a/keyboards/lets_split/rev2fliphalf/rev2fliphalf.c b/keyboards/lets_split/rev2fliphalf/rev2fliphalf.c deleted file mode 100644 index c505d3a6e3..0000000000 --- a/keyboards/lets_split/rev2fliphalf/rev2fliphalf.c +++ /dev/null @@ -1,32 +0,0 @@ -#include "lets_split.h" - -#ifdef AUDIO_ENABLE - float tone_startup[][2] = SONG(STARTUP_SOUND); - float tone_goodbye[][2] = SONG(GOODBYE_SOUND); -#endif - -void matrix_init_kb(void) { - - #ifdef AUDIO_ENABLE - _delay_ms(20); // gets rid of tick - PLAY_NOTE_ARRAY(tone_startup, false, 0); - #endif - - // // green led on - // DDRD |= (1<<5); - // PORTD &= ~(1<<5); - - // // orange led on - // DDRB |= (1<<0); - // PORTB &= ~(1<<0); - - matrix_init_user(); -}; - -void shutdown_user(void) { - #ifdef AUDIO_ENABLE - PLAY_NOTE_ARRAY(tone_goodbye, false, 0); - _delay_ms(150); - stop_all_notes(); - #endif -} From a4bdd6d0845667422c9e42818cfc848bcd0807ee Mon Sep 17 00:00:00 2001 From: ishtob Date: Wed, 22 Mar 2017 14:59:54 -0400 Subject: [PATCH 57/91] Delete rev2fliphalf.h --- .../lets_split/rev2fliphalf/rev2fliphalf.h | 28 ------------------- 1 file changed, 28 deletions(-) delete mode 100644 keyboards/lets_split/rev2fliphalf/rev2fliphalf.h diff --git a/keyboards/lets_split/rev2fliphalf/rev2fliphalf.h b/keyboards/lets_split/rev2fliphalf/rev2fliphalf.h deleted file mode 100644 index 7dc8e5ba8f..0000000000 --- a/keyboards/lets_split/rev2fliphalf/rev2fliphalf.h +++ /dev/null @@ -1,28 +0,0 @@ -#ifndef REV2FLIPHALF_H -#define REV2FLIPHALF_H - -#include "../lets_split.h" - -//void promicro_bootloader_jmp(bool program); -#include "quantum.h" - -//void promicro_bootloader_jmp(bool program); - -#define KEYMAP( \ - k00, k01, k02, k03, k04, k05, k40, k41, k42, k43, k44, k45, \ - k10, k11, k12, k13, k14, k15, k50, k51, k52, k53, k54, k55, \ - k20, k21, k22, k23, k24, k25, k60, k61, k62, k63, k64, k65, \ - k30, k31, k32, k33, k34, k35, k70, k71, k72, k73, k74, k75 \ - ) \ - { \ - { k00, k01, k02, k03, k04, k05 }, \ - { k10, k11, k12, k13, k14, k15 }, \ - { k20, k21, k22, k23, k24, k25 }, \ - { k30, k31, k32, k33, k34, k35 }, \ - { k40, k41, k42, k43, k44, k45 }, \ - { k50, k51, k52, k53, k54, k55 }, \ - { k60, k61, k62, k63, k64, k65 }, \ - { k70, k71, k72, k73, k74, k75 } \ - } - -#endif \ No newline at end of file From 3a7083d810441253404ac22dda259172b6f9b6de Mon Sep 17 00:00:00 2001 From: ishtob Date: Wed, 22 Mar 2017 15:00:00 -0400 Subject: [PATCH 58/91] Delete rules.mk --- keyboards/lets_split/rev2fliphalf/rules.mk | 5 ----- 1 file changed, 5 deletions(-) delete mode 100644 keyboards/lets_split/rev2fliphalf/rules.mk diff --git a/keyboards/lets_split/rev2fliphalf/rules.mk b/keyboards/lets_split/rev2fliphalf/rules.mk deleted file mode 100644 index 80a942d06f..0000000000 --- a/keyboards/lets_split/rev2fliphalf/rules.mk +++ /dev/null @@ -1,5 +0,0 @@ -BACKLIGHT_ENABLE = no - -ifndef QUANTUM_DIR - include ../../../Makefile -endif From 423c68c210d73f6bb05c3e9f4a994833b12a524e Mon Sep 17 00:00:00 2001 From: ishtob Date: Wed, 22 Mar 2017 15:02:49 -0400 Subject: [PATCH 59/91] Merged Fliphalf, now defined in config, added OLED Can now use the following in the keymap config.h to call the flipped matrix ``` #define FLIPHALF ``` --- keyboards/lets_split/rev2/rev2.c | 8 +++++ keyboards/lets_split/rev2/rev2.h | 59 +++++++++++++++++++++++++++----- 2 files changed, 59 insertions(+), 8 deletions(-) diff --git a/keyboards/lets_split/rev2/rev2.c b/keyboards/lets_split/rev2/rev2.c index c505d3a6e3..8bfa171d01 100644 --- a/keyboards/lets_split/rev2/rev2.c +++ b/keyboards/lets_split/rev2/rev2.c @@ -5,6 +5,13 @@ float tone_goodbye[][2] = SONG(GOODBYE_SOUND); #endif +#ifdef SSD1306OLED +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); +} +#endif + void matrix_init_kb(void) { #ifdef AUDIO_ENABLE @@ -30,3 +37,4 @@ void shutdown_user(void) { stop_all_notes(); #endif } + diff --git a/keyboards/lets_split/rev2/rev2.h b/keyboards/lets_split/rev2/rev2.h index 990976de2b..054731366e 100644 --- a/keyboards/lets_split/rev2/rev2.h +++ b/keyboards/lets_split/rev2/rev2.h @@ -6,23 +6,66 @@ //void promicro_bootloader_jmp(bool program); #include "quantum.h" + +#ifdef USE_I2C +#include +#ifdef __AVR__ +#include +#include +#endif +#ifdef SSD1306OLED +extern bool iota_gfx_init(void); +extern void iota_gfx_task(void); +extern bool iota_gfx_off(void); +extern bool iota_gfx_on(void); +extern void iota_gfx_flush(void); +extern void iota_gfx_write_char(uint8_t c); +extern void iota_gfx_write(const char *data); +extern void iota_gfx_write_P(const char *data); +extern void iota_gfx_clear_screen(void); +#endif +#endif + //void promicro_bootloader_jmp(bool program); +#ifndef FLIP_HALF +//Standard Keymap #define KEYMAP( \ - k00, k01, k02, k03, k04, k05, k45, k44, k43, k42, k41, k40, \ - k10, k11, k12, k13, k14, k15, k55, k54, k53, k52, k51, k50, \ - k20, k21, k22, k23, k24, k25, k65, k64, k63, k62, k61, k60, \ - k30, k31, k32, k33, k34, k35, k75, k74, k73, k72, k71, k70 \ + k40, k41, k42, k43, k44, k45, k05, k04, k03, k02, k01, k00, \ + k50, k51, k52, k53, k54, k55, k15, k14, k13, k12, k11, k10, \ + k60, k61, k62, k63, k64, k65, k25, k24, k23, k22, k21, k20, \ + k70, k71, k72, k73, k74, k75, k35, k34, k33, k32, k31, k30 \ + ) \ + { \ + { k45, k44, k43, k42, k41, k40 }, \ + { k55, k54, k53, k52, k51, k50 }, \ + { k65, k64, k63, k62, k61, k60 }, \ + { k75, k74, k73, k72, k71, k70 }, \ + { k00, k01, k02, k03, k04, k05 }, \ + { k10, k11, k12, k13, k14, k15 }, \ + { k20, k21, k22, k23, k24, k25 }, \ + { k30, k31, k32, k33, k34, k35 } \ + } + +#else +// Keymap with one side flipped +#define KEYMAP( \ + k00, k01, k02, k03, k04, k05, k40, k41, k42, k43, k44, k45, \ + k10, k11, k12, k13, k14, k15, k50, k51, k52, k53, k54, k55, \ + k20, k21, k22, k23, k24, k25, k60, k61, k62, k63, k64, k65, \ + k30, k31, k32, k33, k34, k35, k70, k71, k72, k73, k74, k75 \ ) \ { \ { k00, k01, k02, k03, k04, k05 }, \ { k10, k11, k12, k13, k14, k15 }, \ { k20, k21, k22, k23, k24, k25 }, \ { k30, k31, k32, k33, k34, k35 }, \ - { k40, k41, k42, k43, k44, k45 }, \ - { k50, k51, k52, k53, k54, k55 }, \ - { k60, k61, k62, k63, k64, k65 }, \ - { k70, k71, k72, k73, k74, k75 } \ + { k45, k44, k43, k42, k41, k40 }, \ + { k55, k54, k53, k52, k51, k50 }, \ + { k65, k64, k63, k62, k61, k60 }, \ + { k75, k74, k73, k72, k71, k70 } \ } +#endif + #endif \ No newline at end of file From 65317a3a020c0b0261849fb4c40d3aae175ac337 Mon Sep 17 00:00:00 2001 From: ishtob Date: Wed, 22 Mar 2017 15:04:11 -0400 Subject: [PATCH 60/91] Added OLED SSD1306 support to I2C --- keyboards/lets_split/common/glcdfont.c | 276 ++++++++++++++ keyboards/lets_split/i2c.c | 94 ++++- keyboards/lets_split/i2c.h | 20 +- keyboards/lets_split/matrix.c | 7 +- keyboards/lets_split/rules.mk | 15 +- keyboards/lets_split/split_util.c | 7 +- keyboards/lets_split/split_util.h | 2 + keyboards/lets_split/ssd1306.c | 508 +++++++++++++++++++++++++ 8 files changed, 908 insertions(+), 21 deletions(-) create mode 100644 keyboards/lets_split/common/glcdfont.c create mode 100644 keyboards/lets_split/ssd1306.c diff --git a/keyboards/lets_split/common/glcdfont.c b/keyboards/lets_split/common/glcdfont.c new file mode 100644 index 0000000000..6f88bd23a7 --- /dev/null +++ b/keyboards/lets_split/common/glcdfont.c @@ -0,0 +1,276 @@ +// This is the 'classic' fixed-space bitmap font for Adafruit_GFX since 1.0. +// See gfxfont.h for newer custom bitmap font info. + +#ifndef FONT5X7_H +#define FONT5X7_H + +#ifdef __AVR__ + #include + #include +#elif defined(ESP8266) + #include +#else + #define PROGMEM +#endif + +// Standard ASCII 5x7 font + +static const unsigned char font[] PROGMEM = { + 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3E, 0x5B, 0x4F, 0x5B, 0x3E, + 0x3E, 0x6B, 0x4F, 0x6B, 0x3E, + 0x1C, 0x3E, 0x7C, 0x3E, 0x1C, + 0x18, 0x3C, 0x7E, 0x3C, 0x18, + 0x1C, 0x57, 0x7D, 0x57, 0x1C, + 0x1C, 0x5E, 0x7F, 0x5E, 0x1C, + 0x00, 0x18, 0x3C, 0x18, 0x00, + 0xFF, 0xE7, 0xC3, 0xE7, 0xFF, + 0x00, 0x18, 0x24, 0x18, 0x00, + 0xFF, 0xE7, 0xDB, 0xE7, 0xFF, + 0x30, 0x48, 0x3A, 0x06, 0x0E, + 0x26, 0x29, 0x79, 0x29, 0x26, + 0x40, 0x7F, 0x05, 0x05, 0x07, + 0x40, 0x7F, 0x05, 0x25, 0x3F, + 0x5A, 0x3C, 0xE7, 0x3C, 0x5A, + 0x7F, 0x3E, 0x1C, 0x1C, 0x08, + 0x08, 0x1C, 0x1C, 0x3E, 0x7F, + 0x14, 0x22, 0x7F, 0x22, 0x14, + 0x5F, 0x5F, 0x00, 0x5F, 0x5F, + 0x06, 0x09, 0x7F, 0x01, 0x7F, + 0x00, 0x66, 0x89, 0x95, 0x6A, + 0x60, 0x60, 0x60, 0x60, 0x60, + 0x94, 0xA2, 0xFF, 0xA2, 0x94, + 0x08, 0x04, 0x7E, 0x04, 0x08, + 0x10, 0x20, 0x7E, 0x20, 0x10, + 0x08, 0x08, 0x2A, 0x1C, 0x08, + 0x08, 0x1C, 0x2A, 0x08, 0x08, + 0x1E, 0x10, 0x10, 0x10, 0x10, + 0x0C, 0x1E, 0x0C, 0x1E, 0x0C, + 0x30, 0x38, 0x3E, 0x38, 0x30, + 0x06, 0x0E, 0x3E, 0x0E, 0x06, + 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x5F, 0x00, 0x00, + 0x00, 0x07, 0x00, 0x07, 0x00, + 0x14, 0x7F, 0x14, 0x7F, 0x14, + 0x24, 0x2A, 0x7F, 0x2A, 0x12, + 0x23, 0x13, 0x08, 0x64, 0x62, + 0x36, 0x49, 0x56, 0x20, 0x50, + 0x00, 0x08, 0x07, 0x03, 0x00, + 0x00, 0x1C, 0x22, 0x41, 0x00, + 0x00, 0x41, 0x22, 0x1C, 0x00, + 0x2A, 0x1C, 0x7F, 0x1C, 0x2A, + 0x08, 0x08, 0x3E, 0x08, 0x08, + 0x00, 0x80, 0x70, 0x30, 0x00, + 0x08, 0x08, 0x08, 0x08, 0x08, + 0x00, 0x00, 0x60, 0x60, 0x00, + 0x20, 0x10, 0x08, 0x04, 0x02, + 0x3E, 0x51, 0x49, 0x45, 0x3E, + 0x00, 0x42, 0x7F, 0x40, 0x00, + 0x72, 0x49, 0x49, 0x49, 0x46, + 0x21, 0x41, 0x49, 0x4D, 0x33, + 0x18, 0x14, 0x12, 0x7F, 0x10, + 0x27, 0x45, 0x45, 0x45, 0x39, + 0x3C, 0x4A, 0x49, 0x49, 0x31, + 0x41, 0x21, 0x11, 0x09, 0x07, + 0x36, 0x49, 0x49, 0x49, 0x36, + 0x46, 0x49, 0x49, 0x29, 0x1E, + 0x00, 0x00, 0x14, 0x00, 0x00, + 0x00, 0x40, 0x34, 0x00, 0x00, + 0x00, 0x08, 0x14, 0x22, 0x41, + 0x14, 0x14, 0x14, 0x14, 0x14, + 0x00, 0x41, 0x22, 0x14, 0x08, + 0x02, 0x01, 0x59, 0x09, 0x06, + 0x3E, 0x41, 0x5D, 0x59, 0x4E, + 0x7C, 0x12, 0x11, 0x12, 0x7C, + 0x7F, 0x49, 0x49, 0x49, 0x36, + 0x3E, 0x41, 0x41, 0x41, 0x22, + 0x7F, 0x41, 0x41, 0x41, 0x3E, + 0x7F, 0x49, 0x49, 0x49, 0x41, + 0x7F, 0x09, 0x09, 0x09, 0x01, + 0x3E, 0x41, 0x41, 0x51, 0x73, + 0x7F, 0x08, 0x08, 0x08, 0x7F, + 0x00, 0x41, 0x7F, 0x41, 0x00, + 0x20, 0x40, 0x41, 0x3F, 0x01, + 0x7F, 0x08, 0x14, 0x22, 0x41, + 0x7F, 0x40, 0x40, 0x40, 0x40, + 0x7F, 0x02, 0x1C, 0x02, 0x7F, + 0x7F, 0x04, 0x08, 0x10, 0x7F, + 0x3E, 0x41, 0x41, 0x41, 0x3E, + 0x7F, 0x09, 0x09, 0x09, 0x06, + 0x3E, 0x41, 0x51, 0x21, 0x5E, + 0x7F, 0x09, 0x19, 0x29, 0x46, + 0x26, 0x49, 0x49, 0x49, 0x32, + 0x03, 0x01, 0x7F, 0x01, 0x03, + 0x3F, 0x40, 0x40, 0x40, 0x3F, + 0x1F, 0x20, 0x40, 0x20, 0x1F, + 0x3F, 0x40, 0x38, 0x40, 0x3F, + 0x63, 0x14, 0x08, 0x14, 0x63, + 0x03, 0x04, 0x78, 0x04, 0x03, + 0x61, 0x59, 0x49, 0x4D, 0x43, + 0x00, 0x7F, 0x41, 0x41, 0x41, + 0x02, 0x04, 0x08, 0x10, 0x20, + 0x00, 0x41, 0x41, 0x41, 0x7F, + 0x04, 0x02, 0x01, 0x02, 0x04, + 0x40, 0x40, 0x40, 0x40, 0x40, + 0x00, 0x03, 0x07, 0x08, 0x00, + 0x20, 0x54, 0x54, 0x78, 0x40, + 0x7F, 0x28, 0x44, 0x44, 0x38, + 0x38, 0x44, 0x44, 0x44, 0x28, + 0x38, 0x44, 0x44, 0x28, 0x7F, + 0x38, 0x54, 0x54, 0x54, 0x18, + 0x00, 0x08, 0x7E, 0x09, 0x02, + 0x18, 0xA4, 0xA4, 0x9C, 0x78, + 0x7F, 0x08, 0x04, 0x04, 0x78, + 0x00, 0x44, 0x7D, 0x40, 0x00, + 0x20, 0x40, 0x40, 0x3D, 0x00, + 0x7F, 0x10, 0x28, 0x44, 0x00, + 0x00, 0x41, 0x7F, 0x40, 0x00, + 0x7C, 0x04, 0x78, 0x04, 0x78, + 0x7C, 0x08, 0x04, 0x04, 0x78, + 0x38, 0x44, 0x44, 0x44, 0x38, + 0xFC, 0x18, 0x24, 0x24, 0x18, + 0x18, 0x24, 0x24, 0x18, 0xFC, + 0x7C, 0x08, 0x04, 0x04, 0x08, + 0x48, 0x54, 0x54, 0x54, 0x24, + 0x04, 0x04, 0x3F, 0x44, 0x24, + 0x3C, 0x40, 0x40, 0x20, 0x7C, + 0x1C, 0x20, 0x40, 0x20, 0x1C, + 0x3C, 0x40, 0x30, 0x40, 0x3C, + 0x44, 0x28, 0x10, 0x28, 0x44, + 0x4C, 0x90, 0x90, 0x90, 0x7C, + 0x44, 0x64, 0x54, 0x4C, 0x44, + 0x00, 0x08, 0x36, 0x41, 0x00, + 0x00, 0x00, 0x77, 0x00, 0x00, + 0x00, 0x41, 0x36, 0x08, 0x00, + 0x02, 0x01, 0x02, 0x04, 0x02, + 0x3C, 0x26, 0x23, 0x26, 0x3C, + 0x1E, 0xA1, 0xA1, 0x61, 0x12, + 0x3A, 0x40, 0x40, 0x20, 0x7A, + 0x38, 0x54, 0x54, 0x55, 0x59, + 0x21, 0x55, 0x55, 0x79, 0x41, + 0x22, 0x54, 0x54, 0x78, 0x42, // a-umlaut + 0x21, 0x55, 0x54, 0x78, 0x40, + 0x20, 0x54, 0x55, 0x79, 0x40, + 0x0C, 0x1E, 0x52, 0x72, 0x12, + 0x39, 0x55, 0x55, 0x55, 0x59, + 0x39, 0x54, 0x54, 0x54, 0x59, + 0x39, 0x55, 0x54, 0x54, 0x58, + 0x00, 0x00, 0x45, 0x7C, 0x41, + 0x00, 0x02, 0x45, 0x7D, 0x42, + 0x00, 0x01, 0x45, 0x7C, 0x40, + 0x7D, 0x12, 0x11, 0x12, 0x7D, // A-umlaut + 0xF0, 0x28, 0x25, 0x28, 0xF0, + 0x7C, 0x54, 0x55, 0x45, 0x00, + 0x20, 0x54, 0x54, 0x7C, 0x54, + 0x7C, 0x0A, 0x09, 0x7F, 0x49, + 0x32, 0x49, 0x49, 0x49, 0x32, + 0x3A, 0x44, 0x44, 0x44, 0x3A, // o-umlaut + 0x32, 0x4A, 0x48, 0x48, 0x30, + 0x3A, 0x41, 0x41, 0x21, 0x7A, + 0x3A, 0x42, 0x40, 0x20, 0x78, + 0x00, 0x9D, 0xA0, 0xA0, 0x7D, + 0x3D, 0x42, 0x42, 0x42, 0x3D, // O-umlaut + 0x3D, 0x40, 0x40, 0x40, 0x3D, + 0x3C, 0x24, 0xFF, 0x24, 0x24, + 0x48, 0x7E, 0x49, 0x43, 0x66, + 0x2B, 0x2F, 0xFC, 0x2F, 0x2B, + 0xFF, 0x09, 0x29, 0xF6, 0x20, + 0xC0, 0x88, 0x7E, 0x09, 0x03, + 0x20, 0x54, 0x54, 0x79, 0x41, + 0x00, 0x00, 0x44, 0x7D, 0x41, + 0x30, 0x48, 0x48, 0x4A, 0x32, + 0x38, 0x40, 0x40, 0x22, 0x7A, + 0x00, 0x7A, 0x0A, 0x0A, 0x72, + 0x7D, 0x0D, 0x19, 0x31, 0x7D, + 0x26, 0x29, 0x29, 0x2F, 0x28, + 0x26, 0x29, 0x29, 0x29, 0x26, + 0x30, 0x48, 0x4D, 0x40, 0x20, + 0x38, 0x08, 0x08, 0x08, 0x08, + 0x08, 0x08, 0x08, 0x08, 0x38, + 0x2F, 0x10, 0xC8, 0xAC, 0xBA, + 0x2F, 0x10, 0x28, 0x34, 0xFA, + 0x00, 0x00, 0x7B, 0x00, 0x00, + 0x08, 0x14, 0x2A, 0x14, 0x22, + 0x22, 0x14, 0x2A, 0x14, 0x08, + 0x55, 0x00, 0x55, 0x00, 0x55, // #176 (25% block) missing in old code + 0xAA, 0x55, 0xAA, 0x55, 0xAA, // 50% block + 0xFF, 0x55, 0xFF, 0x55, 0xFF, // 75% block + 0x00, 0x00, 0x00, 0xFF, 0x00, + 0x10, 0x10, 0x10, 0xFF, 0x00, + 0x14, 0x14, 0x14, 0xFF, 0x00, + 0x10, 0x10, 0xFF, 0x00, 0xFF, + 0x10, 0x10, 0xF0, 0x10, 0xF0, + 0x14, 0x14, 0x14, 0xFC, 0x00, + 0x14, 0x14, 0xF7, 0x00, 0xFF, + 0x00, 0x00, 0xFF, 0x00, 0xFF, + 0x14, 0x14, 0xF4, 0x04, 0xFC, + 0x14, 0x14, 0x17, 0x10, 0x1F, + 0x10, 0x10, 0x1F, 0x10, 0x1F, + 0x14, 0x14, 0x14, 0x1F, 0x00, + 0x10, 0x10, 0x10, 0xF0, 0x00, + 0x00, 0x00, 0x00, 0x1F, 0x10, + 0x10, 0x10, 0x10, 0x1F, 0x10, + 0x10, 0x10, 0x10, 0xF0, 0x10, + 0x00, 0x00, 0x00, 0xFF, 0x10, + 0x10, 0x10, 0x10, 0x10, 0x10, + 0x10, 0x10, 0x10, 0xFF, 0x10, + 0x00, 0x00, 0x00, 0xFF, 0x14, + 0x00, 0x00, 0xFF, 0x00, 0xFF, + 0x00, 0x00, 0x1F, 0x10, 0x17, + 0x00, 0x00, 0xFC, 0x04, 0xF4, + 0x14, 0x14, 0x17, 0x10, 0x17, + 0x14, 0x14, 0xF4, 0x04, 0xF4, + 0x00, 0x00, 0xFF, 0x00, 0xF7, + 0x14, 0x14, 0x14, 0x14, 0x14, + 0x14, 0x14, 0xF7, 0x00, 0xF7, + 0x14, 0x14, 0x14, 0x17, 0x14, + 0x10, 0x10, 0x1F, 0x10, 0x1F, + 0x14, 0x14, 0x14, 0xF4, 0x14, + 0x10, 0x10, 0xF0, 0x10, 0xF0, + 0x00, 0x00, 0x1F, 0x10, 0x1F, + 0x00, 0x00, 0x00, 0x1F, 0x14, + 0x00, 0x00, 0x00, 0xFC, 0x14, + 0x00, 0x00, 0xF0, 0x10, 0xF0, + 0x10, 0x10, 0xFF, 0x10, 0xFF, + 0x14, 0x14, 0x14, 0xFF, 0x14, + 0x10, 0x10, 0x10, 0x1F, 0x00, + 0x00, 0x00, 0x00, 0xF0, 0x10, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, + 0xFF, 0xFF, 0xFF, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xFF, 0xFF, + 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, + 0x38, 0x44, 0x44, 0x38, 0x44, + 0xFC, 0x4A, 0x4A, 0x4A, 0x34, // sharp-s or beta + 0x7E, 0x02, 0x02, 0x06, 0x06, + 0x02, 0x7E, 0x02, 0x7E, 0x02, + 0x63, 0x55, 0x49, 0x41, 0x63, + 0x38, 0x44, 0x44, 0x3C, 0x04, + 0x40, 0x7E, 0x20, 0x1E, 0x20, + 0x06, 0x02, 0x7E, 0x02, 0x02, + 0x99, 0xA5, 0xE7, 0xA5, 0x99, + 0x1C, 0x2A, 0x49, 0x2A, 0x1C, + 0x4C, 0x72, 0x01, 0x72, 0x4C, + 0x30, 0x4A, 0x4D, 0x4D, 0x30, + 0x30, 0x48, 0x78, 0x48, 0x30, + 0xBC, 0x62, 0x5A, 0x46, 0x3D, + 0x3E, 0x49, 0x49, 0x49, 0x00, + 0x7E, 0x01, 0x01, 0x01, 0x7E, + 0x2A, 0x2A, 0x2A, 0x2A, 0x2A, + 0x44, 0x44, 0x5F, 0x44, 0x44, + 0x40, 0x51, 0x4A, 0x44, 0x40, + 0x40, 0x44, 0x4A, 0x51, 0x40, + 0x00, 0x00, 0xFF, 0x01, 0x03, + 0xE0, 0x80, 0xFF, 0x00, 0x00, + 0x08, 0x08, 0x6B, 0x6B, 0x08, + 0x36, 0x12, 0x36, 0x24, 0x36, + 0x06, 0x0F, 0x09, 0x0F, 0x06, + 0x00, 0x00, 0x18, 0x18, 0x00, + 0x00, 0x00, 0x10, 0x10, 0x00, + 0x30, 0x40, 0xFF, 0x01, 0x01, + 0x00, 0x1F, 0x01, 0x01, 0x1E, + 0x00, 0x19, 0x1D, 0x17, 0x12, + 0x00, 0x3C, 0x3C, 0x3C, 0x3C, + 0x00, 0x00, 0x00, 0x00, 0x00 // #255 NBSP +}; +#endif // FONT5X7_H diff --git a/keyboards/lets_split/i2c.c b/keyboards/lets_split/i2c.c index 084c890c40..038f37a4be 100644 --- a/keyboards/lets_split/i2c.c +++ b/keyboards/lets_split/i2c.c @@ -48,7 +48,7 @@ void i2c_master_init(void) { // returns: 0 => success // 1 => error uint8_t i2c_master_start(uint8_t address) { - TWCR = (1< ERROR_DISCONNECT_COUNT) { @@ -226,9 +227,7 @@ uint8_t matrix_scan(void) TXLED0; error_count = 0; } - matrix_scan_quantum(); - return ret; } diff --git a/keyboards/lets_split/rules.mk b/keyboards/lets_split/rules.mk index 0efa785505..ff159e0f06 100644 --- a/keyboards/lets_split/rules.mk +++ b/keyboards/lets_split/rules.mk @@ -1,7 +1,8 @@ SRC += matrix.c \ i2c.c \ split_util.c \ - serial.c + serial.c\ + ssd1306.c # MCU name #MCU = at90usb1287 @@ -73,15 +74,3 @@ USE_I2C ?= yes SLEEP_LED_ENABLE ?= no # Breathing sleep LED during USB suspend CUSTOM_MATRIX = yes - -avrdude: build - ls /dev/tty* > /tmp/1; \ - echo "Reset your Pro Micro now"; \ - while [[ -z $$USB ]]; do \ - sleep 1; \ - ls /dev/tty* > /tmp/2; \ - USB=`diff /tmp/1 /tmp/2 | grep -o '/dev/tty.*'`; \ - done; \ - avrdude -p $(MCU) -c avr109 -P $$USB -U flash:w:$(BUILD_DIR)/$(TARGET).hex - -.PHONY: avrdude diff --git a/keyboards/lets_split/split_util.c b/keyboards/lets_split/split_util.c index 226dc18816..b87bae38b1 100644 --- a/keyboards/lets_split/split_util.c +++ b/keyboards/lets_split/split_util.c @@ -21,8 +21,8 @@ static void setup_handedness(void) { #ifdef EE_HANDS isLeftHand = eeprom_read_byte(EECONFIG_HANDEDNESS); #else - // I2C_MASTER_RIGHT is deprecated use MASTER_RIGHT instead since this works for both serial and i2c - #if defined(I2C_MASTER_RIGHT) || defined(MASTER_RIGHT) + // I2c_MASTER_RIGHT ish deprecate use MASTER_RIGHT instead since this works for both serial and i2c: + #if defined (I2C_MASTER_RIGHT) || defined (MASTER_RIGHT) isLeftHand = !has_usb(); #else isLeftHand = has_usb(); @@ -33,6 +33,9 @@ static void setup_handedness(void) { static void keyboard_master_setup(void) { #ifdef USE_I2C i2c_master_init(); +#ifdef SSD1306OLED + matrix_master_OLED_init (); +#endif #else serial_master_init(); #endif diff --git a/keyboards/lets_split/split_util.h b/keyboards/lets_split/split_util.h index 6b896679ca..3ae76c209a 100644 --- a/keyboards/lets_split/split_util.h +++ b/keyboards/lets_split/split_util.h @@ -19,4 +19,6 @@ void split_keyboard_setup(void); bool has_usb(void); void keyboard_slave_loop(void); +void matrix_master_OLED_init (void); + #endif diff --git a/keyboards/lets_split/ssd1306.c b/keyboards/lets_split/ssd1306.c new file mode 100644 index 0000000000..c25a355bf1 --- /dev/null +++ b/keyboards/lets_split/ssd1306.c @@ -0,0 +1,508 @@ +#include "config.h" +#include "i2c.h" +#include +#include +#include +#include "print.h" +#include "lets_split.h" +#include "common/glcdfont.c" +#ifdef ADAFRUIT_BLE_ENABLE +#include "adafruit_ble.h" +#endif +#ifdef PROTOCOL_LUFA +#include "lufa.h" +#endif +#include "sendchar.h" +#include "pincontrol.h" + +//assign the right code to your layers +#define _BASE 0 +#define _LOWER 8 +#define _RAISE 16 +#define _FNLAYER 64 +#define _NUMLAY 128 +#define _NLOWER 136 +#define _NFNLAYER 192 +#define _MOUSECURSOR 256 +#define _ADJUST 65560 + +// Set this to 1 to help diagnose early startup problems +// when testing power-on with ble. Turn it off otherwise, +// as the latency of printing most of the debug info messes +// with the matrix scan, causing keys to drop. +#define DEBUG_TO_SCREEN 0 + +// Controls the SSD1306 128x32 OLED display via i2c + +#define i2cAddress 0x3C + +#define DisplayHeight 32 +#define DisplayWidth 128 + +#define FontHeight 8 +#define FontWidth 6 + +#define MatrixRows (DisplayHeight / FontHeight) +#define MatrixCols (DisplayWidth / FontWidth) + +struct CharacterMatrix { + uint8_t display[MatrixRows][MatrixCols]; + uint8_t *cursor; + bool dirty; +}; + +static struct CharacterMatrix display; +//static uint16_t last_battery_update; +//static uint32_t vbat; +//#define BatteryUpdateInterval 10000 /* milliseconds */ +#define ScreenOffInterval 300000 /* milliseconds */ +#if DEBUG_TO_SCREEN +static uint8_t displaying; +#endif +static uint16_t last_flush; + +enum ssd1306_cmds { + DisplayOff = 0xAE, + DisplayOn = 0xAF, + + SetContrast = 0x81, + DisplayAllOnResume = 0xA4, + + DisplayAllOn = 0xA5, + NormalDisplay = 0xA6, + InvertDisplay = 0xA7, + SetDisplayOffset = 0xD3, + SetComPins = 0xda, + SetVComDetect = 0xdb, + SetDisplayClockDiv = 0xD5, + SetPreCharge = 0xd9, + SetMultiPlex = 0xa8, + SetLowColumn = 0x00, + SetHighColumn = 0x10, + SetStartLine = 0x40, + + SetMemoryMode = 0x20, + ColumnAddr = 0x21, + PageAddr = 0x22, + + ComScanInc = 0xc0, + ComScanDec = 0xc8, + SegRemap = 0xa0, + SetChargePump = 0x8d, + ExternalVcc = 0x01, + SwitchCapVcc = 0x02, + + ActivateScroll = 0x2f, + DeActivateScroll = 0x2e, + SetVerticalScrollArea = 0xa3, + RightHorizontalScroll = 0x26, + LeftHorizontalScroll = 0x27, + VerticalAndRightHorizontalScroll = 0x29, + VerticalAndLeftHorizontalScroll = 0x2a, +}; + + +// Write command sequence. +// Returns true on success. +static inline bool _send_cmd1(uint8_t cmd) { + bool res = false; + + if (i2c_start_write(i2cAddress)) { + xprintf("failed to start write to %d\n", i2cAddress); + goto done; + } + + if (i2c_master_write(0x0 /* command byte follows */)) { + print("failed to write control byte\n"); + + goto done; + } + + if (i2c_master_write(cmd)) { + xprintf("failed to write command %d\n", cmd); + goto done; + } + res = true; +done: + i2c_master_stop(); + return res; +} + +// Write 2-byte command sequence. +// Returns true on success +static inline bool _send_cmd2(uint8_t cmd, uint8_t opr) { + if (!_send_cmd1(cmd)) { + return false; + } + return _send_cmd1(opr); +} + +// Write 3-byte command sequence. +// Returns true on success +static inline bool _send_cmd3(uint8_t cmd, uint8_t opr1, uint8_t opr2) { + if (!_send_cmd1(cmd)) { + return false; + } + if (!_send_cmd1(opr1)) { + return false; + } + return _send_cmd1(opr2); +} + +#define send_cmd1(c) if (!_send_cmd1(c)) {goto done;} +#define send_cmd2(c,o) if (!_send_cmd2(c,o)) {goto done;} +#define send_cmd3(c,o1,o2) if (!_send_cmd3(c,o1,o2)) {goto done;} + +static void matrix_clear(struct CharacterMatrix *matrix); + +static void clear_display(void) { + matrix_clear(&display); + + // Clear all of the display bits (there can be random noise + // in the RAM on startup) + send_cmd3(PageAddr, 0, (DisplayHeight / 8) - 1); + send_cmd3(ColumnAddr, 0, DisplayWidth - 1); + + if (i2c_start_write(i2cAddress)) { + goto done; + } + if (i2c_master_write(0x40)) { + // Data mode + goto done; + } + for (uint8_t row = 0; row < MatrixRows; ++row) { + for (uint8_t col = 0; col < DisplayWidth; ++col) { + i2c_master_write(0); + } + } + + display.dirty = false; + +done: + i2c_master_stop(); +} + +#if DEBUG_TO_SCREEN +#undef sendchar +static int8_t capture_sendchar(uint8_t c) { + sendchar(c); + iota_gfx_write_char(c); + + if (!displaying) { + iota_gfx_flush(); + } + return 0; +} +#endif + +bool iota_gfx_init(void) { + bool success = false; + + send_cmd1(DisplayOff); + send_cmd2(SetDisplayClockDiv, 0x80); + send_cmd2(SetMultiPlex, DisplayHeight - 1); + + send_cmd2(SetDisplayOffset, 0); + + + send_cmd1(SetStartLine | 0x0); + send_cmd2(SetChargePump, 0x14 /* Enable */); + send_cmd2(SetMemoryMode, 0 /* horizontal addressing */); + +/* Flips the display orientation 0 degrees + send_cmd1(SegRemap | 0x1); + send_cmd1(ComScanDec); +*/ +// the following Flip the display orientation 180 degrees */ + send_cmd1(SegRemap); + send_cmd1(ComScanInc); +//end flip + send_cmd2(SetComPins, 0x2); + send_cmd2(SetContrast, 0x8f); + send_cmd2(SetPreCharge, 0xf1); + send_cmd2(SetVComDetect, 0x40); + send_cmd1(DisplayAllOnResume); + send_cmd1(NormalDisplay); + send_cmd1(DeActivateScroll); + send_cmd1(DisplayOn); + + send_cmd2(SetContrast, 0); // Dim + + clear_display(); + + success = true; + + iota_gfx_flush(); + +#if DEBUG_TO_SCREEN + print_set_sendchar(capture_sendchar); +#endif + +done: + return success; +} + +bool iota_gfx_off(void) { + bool success = false; + + send_cmd1(DisplayOff); + success = true; + +done: + return success; +} + +bool iota_gfx_on(void) { + bool success = false; + + send_cmd1(DisplayOn); + success = true; + +done: + return success; +} + +static void matrix_write_char_inner(struct CharacterMatrix *matrix, uint8_t c) { + *matrix->cursor = c; + ++matrix->cursor; + + if (matrix->cursor - &matrix->display[0][0] == sizeof(matrix->display)) { + // We went off the end; scroll the display upwards by one line + memmove(&matrix->display[0], &matrix->display[1], + MatrixCols * (MatrixRows - 1)); + matrix->cursor = &matrix->display[MatrixRows - 1][0]; + memset(matrix->cursor, ' ', MatrixCols); + } +} + +static void matrix_write_char(struct CharacterMatrix *matrix, uint8_t c) { + matrix->dirty = true; + + if (c == '\n') { + // Clear to end of line from the cursor and then move to the + // start of the next line + uint8_t cursor_col = (matrix->cursor - &matrix->display[0][0]) % MatrixCols; + + while (cursor_col++ < MatrixCols) { + matrix_write_char_inner(matrix, ' '); + } + return; + } + + matrix_write_char_inner(matrix, c); +} + +void iota_gfx_write_char(uint8_t c) { + matrix_write_char(&display, c); +} + +static void matrix_write(struct CharacterMatrix *matrix, const char *data) { + const char *end = data + strlen(data); + while (data < end) { + matrix_write_char(matrix, *data); + ++data; + } +} + +void iota_gfx_write(const char *data) { + matrix_write(&display, data); +} + +static void matrix_write_P(struct CharacterMatrix *matrix, const char *data) { + while (true) { + uint8_t c = pgm_read_byte(data); + if (c == 0) { + return; + } + matrix_write_char(matrix, c); + ++data; + } +} + +void iota_gfx_write_P(const char *data) { + matrix_write_P(&display, data); +} + +static void matrix_clear(struct CharacterMatrix *matrix) { + memset(matrix->display, ' ', sizeof(matrix->display)); + matrix->cursor = &matrix->display[0][0]; + matrix->dirty = true; +} + +void iota_gfx_clear_screen(void) { + matrix_clear(&display); +} + +static void matrix_render(struct CharacterMatrix *matrix) { + last_flush = timer_read(); + iota_gfx_on(); +#if DEBUG_TO_SCREEN + ++displaying; +#endif + + // Move to the home position + send_cmd3(PageAddr, 0, MatrixRows - 1); + send_cmd3(ColumnAddr, 0, (MatrixCols * FontWidth) - 1); + + if (i2c_start_write(i2cAddress)) { + goto done; + } + if (i2c_master_write(0x40)) { + // Data mode + goto done; + } + + for (uint8_t row = 0; row < MatrixRows; ++row) { + for (uint8_t col = 0; col < MatrixCols; ++col) { + const uint8_t *glyph = font + (matrix->display[row][col] * (FontWidth - 1)); + + for (uint8_t glyphCol = 0; glyphCol < FontWidth - 1; ++glyphCol) { + uint8_t colBits = pgm_read_byte(glyph + glyphCol); + i2c_master_write(colBits); + } + + // 1 column of space between chars (it's not included in the glyph) + i2c_master_write(0); + } + } + + matrix->dirty = false; + +done: + i2c_master_stop(); +#if DEBUG_TO_SCREEN + --displaying; +#endif +} + +void iota_gfx_flush(void) { + matrix_render(&display); +} + +//#include "LUFA/Drivers/Peripheral/ADC.h" + +/* Returns the battery voltage; returns the number of millivolts +static uint32_t read_battery_voltage(void) { + if (last_battery_update == 0 || + timer_elapsed(last_battery_update) > BatteryUpdateInterval) { + ADC_Init(ADC_SINGLE_CONVERSION | ADC_PRESCALE_32); + ADC_SetupChannel(12); + vbat = 2 * 3.3 * ADC_GetChannelReading(ADC_REFERENCE_AVCC | ADC_CHANNEL12); + + last_battery_update = timer_read(); + } + return vbat; +} */ + +static void matrix_update(struct CharacterMatrix *dest, + const struct CharacterMatrix *source) { + if (memcmp(dest->display, source->display, sizeof(dest->display))) { + memcpy(dest->display, source->display, sizeof(dest->display)); + dest->dirty = true; + } +} + +static void render_status_info(void) { +#if DEBUG_TO_SCREEN + if (debug_enable) { + return; + } +#endif + + struct CharacterMatrix matrix; + + matrix_clear(&matrix); + matrix_write_P(&matrix, PSTR("USB: ")); +#ifdef PROTOCOL_LUFA + switch (USB_DeviceState) { + case DEVICE_STATE_Unattached: + matrix_write_P(&matrix, PSTR("Unattached")); + break; + case DEVICE_STATE_Suspended: + matrix_write_P(&matrix, PSTR("Suspended")); + break; + case DEVICE_STATE_Configured: + matrix_write_P(&matrix, PSTR("Connected")); + break; + case DEVICE_STATE_Powered: + matrix_write_P(&matrix, PSTR("Powered")); + break; + case DEVICE_STATE_Default: + matrix_write_P(&matrix, PSTR("Default")); + break; + case DEVICE_STATE_Addressed: + matrix_write_P(&matrix, PSTR("Addressed")); + break; + default: + matrix_write_P(&matrix, PSTR("Invalid")); + } +#endif + + // matrix_write_P(&matrix, (host_keyboard_leds() & (1< ScreenOffInterval) { + iota_gfx_off(); + } +} From 30f450749201b9584bc863cb08724d8f61f0463a Mon Sep 17 00:00:00 2001 From: ishtob Date: Wed, 22 Mar 2017 15:11:03 -0400 Subject: [PATCH 61/91] OLED code cleanup --- keyboards/lets_split/ssd1306.c | 52 ++++------------------------------ 1 file changed, 6 insertions(+), 46 deletions(-) diff --git a/keyboards/lets_split/ssd1306.c b/keyboards/lets_split/ssd1306.c index c25a355bf1..a68165f837 100644 --- a/keyboards/lets_split/ssd1306.c +++ b/keyboards/lets_split/ssd1306.c @@ -209,14 +209,14 @@ bool iota_gfx_init(void) { send_cmd2(SetChargePump, 0x14 /* Enable */); send_cmd2(SetMemoryMode, 0 /* horizontal addressing */); -/* Flips the display orientation 0 degrees +/// Flips the display orientation 0 degrees send_cmd1(SegRemap | 0x1); send_cmd1(ComScanDec); -*/ -// the following Flip the display orientation 180 degrees */ +/* +// the following Flip the display orientation 180 degrees send_cmd1(SegRemap); send_cmd1(ComScanInc); -//end flip +*/end flip send_cmd2(SetComPins, 0x2); send_cmd2(SetContrast, 0x8f); send_cmd2(SetPreCharge, 0xf1); @@ -379,21 +379,6 @@ void iota_gfx_flush(void) { matrix_render(&display); } -//#include "LUFA/Drivers/Peripheral/ADC.h" - -/* Returns the battery voltage; returns the number of millivolts -static uint32_t read_battery_voltage(void) { - if (last_battery_update == 0 || - timer_elapsed(last_battery_update) > BatteryUpdateInterval) { - ADC_Init(ADC_SINGLE_CONVERSION | ADC_PRESCALE_32); - ADC_SetupChannel(12); - vbat = 2 * 3.3 * ADC_GetChannelReading(ADC_REFERENCE_AVCC | ADC_CHANNEL12); - - last_battery_update = timer_read(); - } - return vbat; -} */ - static void matrix_update(struct CharacterMatrix *dest, const struct CharacterMatrix *source) { if (memcmp(dest->display, source->display, sizeof(dest->display))) { @@ -438,18 +423,7 @@ static void render_status_info(void) { } #endif - // matrix_write_P(&matrix, (host_keyboard_leds() & (1< Date: Wed, 22 Mar 2017 15:14:33 -0400 Subject: [PATCH 62/91] Add files via upload --- .../lets_split/keymaps/OLED_sample/readme.md | 32 +++++++++++++++++++ 1 file changed, 32 insertions(+) create mode 100644 keyboards/lets_split/keymaps/OLED_sample/readme.md diff --git a/keyboards/lets_split/keymaps/OLED_sample/readme.md b/keyboards/lets_split/keymaps/OLED_sample/readme.md new file mode 100644 index 0000000000..839fd42841 --- /dev/null +++ b/keyboards/lets_split/keymaps/OLED_sample/readme.md @@ -0,0 +1,32 @@ +SSD1306 OLED Display via I2C +====== + +Features +-------- + +Some features supported by the firmware: + + +* I2C connection between the two halves is required as the OLED display will use this connection as well. Note this + requires pull-up resistors on the data and clock lines. +* OLED display will connect from either side + + +Wiring +------ + +The wiring for i2c: + +![i2c wiring](imgs/split-keyboard-i2c-schematic.png) + +The pull-up resistors may be placed on either half. It is also possible +to use 4 resistors and have the pull-ups in both halves, but this is +unnecessary in simple use cases. + +Work in progress... + + +OLED Configuration +------------------------------- + +Work in progress... \ No newline at end of file From d1865db599a92695baa1434803a41204cd5e5ca6 Mon Sep 17 00:00:00 2001 From: ishtob Date: Wed, 22 Mar 2017 15:19:01 -0400 Subject: [PATCH 63/91] OLED code cleanup --- keyboards/lets_split/ssd1306.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/keyboards/lets_split/ssd1306.c b/keyboards/lets_split/ssd1306.c index a68165f837..3c7816bb32 100644 --- a/keyboards/lets_split/ssd1306.c +++ b/keyboards/lets_split/ssd1306.c @@ -216,7 +216,7 @@ bool iota_gfx_init(void) { // the following Flip the display orientation 180 degrees send_cmd1(SegRemap); send_cmd1(ComScanInc); -*/end flip +// end flip */ send_cmd2(SetComPins, 0x2); send_cmd2(SetContrast, 0x8f); send_cmd2(SetPreCharge, 0xf1); From 1f7b8a034362f1461d89abee91038df885be4ca2 Mon Sep 17 00:00:00 2001 From: ishtob Date: Wed, 22 Mar 2017 15:45:15 -0400 Subject: [PATCH 64/91] Update matrix.c --- keyboards/lets_split/matrix.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/keyboards/lets_split/matrix.c b/keyboards/lets_split/matrix.c index b6e59cb7f7..1b65019995 100644 --- a/keyboards/lets_split/matrix.c +++ b/keyboards/lets_split/matrix.c @@ -210,8 +210,7 @@ uint8_t matrix_scan(void) if( serial_transaction() ) { #endif // turn on the indicator led when halves are disconnected -// TXLED1; - TXLED0; + TXLED1; error_count++; From ebb46694e500e08ea1d39349d957182270e835f6 Mon Sep 17 00:00:00 2001 From: ishtob Date: Wed, 22 Mar 2017 15:45:45 -0400 Subject: [PATCH 65/91] Update split_util.c --- keyboards/lets_split/split_util.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/keyboards/lets_split/split_util.c b/keyboards/lets_split/split_util.c index b87bae38b1..46586fbc00 100644 --- a/keyboards/lets_split/split_util.c +++ b/keyboards/lets_split/split_util.c @@ -22,7 +22,7 @@ static void setup_handedness(void) { isLeftHand = eeprom_read_byte(EECONFIG_HANDEDNESS); #else // I2c_MASTER_RIGHT ish deprecate use MASTER_RIGHT instead since this works for both serial and i2c: - #if defined (I2C_MASTER_RIGHT) || defined (MASTER_RIGHT) + #if defined(I2C_MASTER_RIGHT) || defined(MASTER_RIGHT) isLeftHand = !has_usb(); #else isLeftHand = has_usb(); From 732a7f2be9b197ed22d20bea3d4dcd8013c8e077 Mon Sep 17 00:00:00 2001 From: ishtob Date: Wed, 22 Mar 2017 15:47:53 -0400 Subject: [PATCH 66/91] Update matrix.c --- keyboards/lets_split/matrix.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/keyboards/lets_split/matrix.c b/keyboards/lets_split/matrix.c index 1b65019995..81dfb14455 100644 --- a/keyboards/lets_split/matrix.c +++ b/keyboards/lets_split/matrix.c @@ -211,7 +211,7 @@ uint8_t matrix_scan(void) #endif // turn on the indicator led when halves are disconnected TXLED1; - + error_count++; if (error_count > ERROR_DISCONNECT_COUNT) { From be0cfbb97e5577e331e327b4e729b1b4c4ccb54c Mon Sep 17 00:00:00 2001 From: ishtob Date: Wed, 22 Mar 2017 15:48:56 -0400 Subject: [PATCH 67/91] Update i2c.c --- keyboards/lets_split/i2c.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/keyboards/lets_split/i2c.c b/keyboards/lets_split/i2c.c index 038f37a4be..f1a349168b 100644 --- a/keyboards/lets_split/i2c.c +++ b/keyboards/lets_split/i2c.c @@ -48,7 +48,7 @@ void i2c_master_init(void) { // returns: 0 => success // 1 => error uint8_t i2c_master_start(uint8_t address) { - TWCR = (1< Date: Wed, 22 Mar 2017 15:49:21 -0400 Subject: [PATCH 68/91] Update i2c.c --- keyboards/lets_split/i2c.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/keyboards/lets_split/i2c.c b/keyboards/lets_split/i2c.c index f1a349168b..755038f5e2 100644 --- a/keyboards/lets_split/i2c.c +++ b/keyboards/lets_split/i2c.c @@ -48,7 +48,7 @@ void i2c_master_init(void) { // returns: 0 => success // 1 => error uint8_t i2c_master_start(uint8_t address) { - TWCR = (1< Date: Wed, 22 Mar 2017 15:50:18 -0400 Subject: [PATCH 69/91] Update i2c.c --- keyboards/lets_split/i2c.c | 90 -------------------------------------- 1 file changed, 90 deletions(-) diff --git a/keyboards/lets_split/i2c.c b/keyboards/lets_split/i2c.c index 755038f5e2..fbf2f3b767 100644 --- a/keyboards/lets_split/i2c.c +++ b/keyboards/lets_split/i2c.c @@ -161,94 +161,4 @@ ISR(TWI_vect) { TWCR |= (1< Date: Wed, 22 Mar 2017 15:50:52 -0400 Subject: [PATCH 70/91] Update i2c.c --- keyboards/lets_split/i2c.c | 2 -- 1 file changed, 2 deletions(-) diff --git a/keyboards/lets_split/i2c.c b/keyboards/lets_split/i2c.c index fbf2f3b767..084c890c40 100644 --- a/keyboards/lets_split/i2c.c +++ b/keyboards/lets_split/i2c.c @@ -56,7 +56,6 @@ uint8_t i2c_master_start(uint8_t address) { if ( (TW_STATUS != TW_START) && (TW_STATUS != TW_REP_START)) return 1; - // send device address TWDR = address; TWCR = (1< Date: Wed, 22 Mar 2017 15:56:45 -0400 Subject: [PATCH 71/91] Update readme.md --- keyboards/lets_split/keymaps/OLED_sample/readme.md | 9 +-------- 1 file changed, 1 insertion(+), 8 deletions(-) diff --git a/keyboards/lets_split/keymaps/OLED_sample/readme.md b/keyboards/lets_split/keymaps/OLED_sample/readme.md index 839fd42841..02888855b8 100644 --- a/keyboards/lets_split/keymaps/OLED_sample/readme.md +++ b/keyboards/lets_split/keymaps/OLED_sample/readme.md @@ -15,13 +15,6 @@ Some features supported by the firmware: Wiring ------ -The wiring for i2c: - -![i2c wiring](imgs/split-keyboard-i2c-schematic.png) - -The pull-up resistors may be placed on either half. It is also possible -to use 4 resistors and have the pull-ups in both halves, but this is -unnecessary in simple use cases. Work in progress... @@ -29,4 +22,4 @@ Work in progress... OLED Configuration ------------------------------- -Work in progress... \ No newline at end of file +Work in progress... From 91776772fd5600116e9d02c614813c427a3d4219 Mon Sep 17 00:00:00 2001 From: Danny Nguyen Date: Wed, 15 Mar 2017 16:34:10 -0400 Subject: [PATCH 72/91] Remove line for hands selection via EEPROM, reduce tap duration from 200ms to 150ms --- keyboards/lets_split/keymaps/hexwire/config.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/keyboards/lets_split/keymaps/hexwire/config.h b/keyboards/lets_split/keymaps/hexwire/config.h index 983f8e352e..11adbc454c 100644 --- a/keyboards/lets_split/keymaps/hexwire/config.h +++ b/keyboards/lets_split/keymaps/hexwire/config.h @@ -18,7 +18,7 @@ along with this program. If not, see . #define USE_SERIAL -#define EE_HANDS +#define TAPPING_TERM 150 #undef RGBLED_NUM #define RGB_DI_PIN B0 From f3e3ff29a346bf917403672f8dbdf08c9f3a83f6 Mon Sep 17 00:00:00 2001 From: Danny Nguyen Date: Wed, 15 Mar 2017 16:34:57 -0400 Subject: [PATCH 73/91] Add Makefile in keymap dir --- keyboards/lets_split/keymaps/hexwire/Makefile | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/keyboards/lets_split/keymaps/hexwire/Makefile b/keyboards/lets_split/keymaps/hexwire/Makefile index 1e3cebb145..1e57612788 100644 --- a/keyboards/lets_split/keymaps/hexwire/Makefile +++ b/keyboards/lets_split/keymaps/hexwire/Makefile @@ -1 +1,5 @@ RGBLIGHT_ENABLE = yes + +ifndef QUANTUM_DIR + include ../../../../Makefile +endif From e5c5902e95840876f1e51c3e8e0a93311676fa27 Mon Sep 17 00:00:00 2001 From: Danny Nguyen Date: Thu, 23 Mar 2017 08:46:10 -0400 Subject: [PATCH 74/91] Move keymap into config file --- .../keymaps/hexwire/compact_keymap.h | 23 ------------- keyboards/lets_split/keymaps/hexwire/config.h | 32 +++++++++++++++++++ keyboards/lets_split/keymaps/hexwire/keymap.c | 2 +- 3 files changed, 33 insertions(+), 24 deletions(-) delete mode 100644 keyboards/lets_split/keymaps/hexwire/compact_keymap.h diff --git a/keyboards/lets_split/keymaps/hexwire/compact_keymap.h b/keyboards/lets_split/keymaps/hexwire/compact_keymap.h deleted file mode 100644 index d9d063fbfe..0000000000 --- a/keyboards/lets_split/keymaps/hexwire/compact_keymap.h +++ /dev/null @@ -1,23 +0,0 @@ -#ifndef COMPACT_KEYMAP_H -#define COMPACT_KEYMAP_H - -#define COMPACT_KEYMAP( \ - k00, k01, k02, k03, k04, k05, k45, k44, k43, k42, k41, k40, \ - k10, k11, k12, k13, k14, k15, k55, k54, k53, k52, k51, k50, \ - k20, k21, k22, k23, k24, k25, k65, k64, k63, k62, k61, k60, \ - k30, k31, k32, k33, k34, k35, k75, k74, k73, k72, k71, k70 \ - ) \ - { \ - { KC_##k00, KC_##k01, KC_##k02, KC_##k03, KC_##k04, KC_##k05 }, \ - { KC_##k10, KC_##k11, KC_##k12, KC_##k13, KC_##k14, KC_##k15 }, \ - { KC_##k20, KC_##k21, KC_##k22, KC_##k23, KC_##k24, KC_##k25 }, \ - { KC_##k30, KC_##k31, KC_##k32, KC_##k33, KC_##k34, KC_##k35 }, \ - { KC_##k40, KC_##k41, KC_##k42, KC_##k43, KC_##k44, KC_##k45 }, \ - { KC_##k50, KC_##k51, KC_##k52, KC_##k53, KC_##k54, KC_##k55 }, \ - { KC_##k60, KC_##k61, KC_##k62, KC_##k63, KC_##k64, KC_##k65 }, \ - { KC_##k70, KC_##k71, KC_##k72, KC_##k73, KC_##k74, KC_##k75 } \ - } - -#define KC_ KC_TRNS - -#endif \ No newline at end of file diff --git a/keyboards/lets_split/keymaps/hexwire/config.h b/keyboards/lets_split/keymaps/hexwire/config.h index 11adbc454c..38b57266a4 100644 --- a/keyboards/lets_split/keymaps/hexwire/config.h +++ b/keyboards/lets_split/keymaps/hexwire/config.h @@ -30,9 +30,41 @@ along with this program. If not, see . #ifdef SUBPROJECT_rev1 #include "../../rev1/config.h" + #define COMPACT_KEYMAP( \ + k00, k01, k02, k03, k04, k05, k40, k41, k42, k43, k44, k45, \ + k10, k11, k12, k13, k14, k15, k50, k51, k52, k53, k54, k55, \ + k20, k21, k22, k23, k24, k25, k60, k61, k62, k63, k64, k65, \ + k30, k31, k32, k33, k34, k35, k70, k71, k72, k73, k74, k75 \ + ) \ + { \ + { KC_##k00, KC_##k01, KC_##k02, KC_##k03, KC_##k04, KC_##k05 }, \ + { KC_##k10, KC_##k11, KC_##k12, KC_##k13, KC_##k14, KC_##k15 }, \ + { KC_##k20, KC_##k21, KC_##k22, KC_##k23, KC_##k24, KC_##k25 }, \ + { KC_##k30, KC_##k31, KC_##k32, KC_##k33, KC_##k34, KC_##k35 }, \ + { KC_##k40, KC_##k41, KC_##k42, KC_##k43, KC_##k44, KC_##k45 }, \ + { KC_##k50, KC_##k51, KC_##k52, KC_##k53, KC_##k54, KC_##k55 }, \ + { KC_##k60, KC_##k61, KC_##k62, KC_##k63, KC_##k64, KC_##k65 }, \ + { KC_##k70, KC_##k71, KC_##k72, KC_##k73, KC_##k74, KC_##k75 } \ + } #endif #ifdef SUBPROJECT_rev2 #include "../../rev2/config.h" + #define COMPACT_KEYMAP( \ + k00, k01, k02, k03, k04, k05, k45, k44, k43, k42, k41, k40, \ + k10, k11, k12, k13, k14, k15, k55, k54, k53, k52, k51, k50, \ + k20, k21, k22, k23, k24, k25, k65, k64, k63, k62, k61, k60, \ + k30, k31, k32, k33, k34, k35, k75, k74, k73, k72, k71, k70 \ + ) \ + { \ + { KC_##k00, KC_##k01, KC_##k02, KC_##k03, KC_##k04, KC_##k05 }, \ + { KC_##k10, KC_##k11, KC_##k12, KC_##k13, KC_##k14, KC_##k15 }, \ + { KC_##k20, KC_##k21, KC_##k22, KC_##k23, KC_##k24, KC_##k25 }, \ + { KC_##k30, KC_##k31, KC_##k32, KC_##k33, KC_##k34, KC_##k35 }, \ + { KC_##k40, KC_##k41, KC_##k42, KC_##k43, KC_##k44, KC_##k45 }, \ + { KC_##k50, KC_##k51, KC_##k52, KC_##k53, KC_##k54, KC_##k55 }, \ + { KC_##k60, KC_##k61, KC_##k62, KC_##k63, KC_##k64, KC_##k65 }, \ + { KC_##k70, KC_##k71, KC_##k72, KC_##k73, KC_##k74, KC_##k75 } \ + } #endif #ifdef SUBPROJECT_rev2fliphalf #include "../../rev2fliphalf/config.h" diff --git a/keyboards/lets_split/keymaps/hexwire/keymap.c b/keyboards/lets_split/keymaps/hexwire/keymap.c index 796a1fcab0..f8370490d6 100644 --- a/keyboards/lets_split/keymaps/hexwire/keymap.c +++ b/keyboards/lets_split/keymaps/hexwire/keymap.c @@ -1,7 +1,6 @@ #include "lets_split.h" #include "action_layer.h" #include "eeconfig.h" -#include "compact_keymap.h" extern keymap_config_t keymap_config; @@ -25,6 +24,7 @@ enum custom_keycodes { ADJUST, }; +#define KC_ KC_TRNS #define _______ KC_TRNS #define KC_CAPW LGUI(LSFT(KC_3)) // Capture whole screen From edfb50ea5616c9361e479ec41d1d2c3d72f2f51c Mon Sep 17 00:00:00 2001 From: Danny Nguyen Date: Thu, 23 Mar 2017 09:42:32 -0400 Subject: [PATCH 75/91] Initial commit for Atreus50 with working audio --- keyboards/atreus50/Makefile | 3 + keyboards/atreus50/atreus50.c | 10 + keyboards/atreus50/atreus50.h | 36 +++ keyboards/atreus50/config.h | 163 +++++++++++ keyboards/atreus50/keymaps/default/Makefile | 6 + keyboards/atreus50/keymaps/default/keymap.c | 270 +++++++++++++++++++ keyboards/atreus50/keymaps/default/readme.md | 1 + keyboards/atreus50/readme.md | 25 ++ keyboards/atreus50/rules.mk | 81 ++++++ 9 files changed, 595 insertions(+) create mode 100644 keyboards/atreus50/Makefile create mode 100644 keyboards/atreus50/atreus50.c create mode 100644 keyboards/atreus50/atreus50.h create mode 100644 keyboards/atreus50/config.h create mode 100644 keyboards/atreus50/keymaps/default/Makefile create mode 100644 keyboards/atreus50/keymaps/default/keymap.c create mode 100644 keyboards/atreus50/keymaps/default/readme.md create mode 100644 keyboards/atreus50/readme.md create mode 100644 keyboards/atreus50/rules.mk diff --git a/keyboards/atreus50/Makefile b/keyboards/atreus50/Makefile new file mode 100644 index 0000000000..57b2ef62e5 --- /dev/null +++ b/keyboards/atreus50/Makefile @@ -0,0 +1,3 @@ +ifndef MAKEFILE_INCLUDED + include ../../Makefile +endif diff --git a/keyboards/atreus50/atreus50.c b/keyboards/atreus50/atreus50.c new file mode 100644 index 0000000000..0ec63216f1 --- /dev/null +++ b/keyboards/atreus50/atreus50.c @@ -0,0 +1,10 @@ +#include "atreus50.h" + +void matrix_init_kb(void) { + + // Turn status LED on + //DDRE |= (1<<6); + PORTE |= (1<<6); + + matrix_init_user(); +}; \ No newline at end of file diff --git a/keyboards/atreus50/atreus50.h b/keyboards/atreus50/atreus50.h new file mode 100644 index 0000000000..de06f255e8 --- /dev/null +++ b/keyboards/atreus50/atreus50.h @@ -0,0 +1,36 @@ +#ifndef ATREUS50_H +#define ATREUS50_H + +#include "quantum.h" + +// The first section contains all of the arguements +// The second converts the arguments into a two-dimensional array +#define KEYMAP( \ + k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, \ + k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, \ + k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, \ + k30, k31, k32, k33, k34, k35, km0, km1, k36, k37, k38, k39, k3a, k3b \ +) \ +{ \ + { k00, k01, k02, k03, k04, k05, KC_NO, k06, k07, k08, k09, k0a, k0b }, \ + { k10, k11, k12, k13, k14, k15, KC_NO, k16, k17, k18, k19, k1a, k1b }, \ + { k20, k21, k22, k23, k24, k25, km0, k26, k27, k28, k29, k2a, k2b }, \ + { k30, k31, k32, k33, k34, k35, km1, k36, k37, k38, k39, k3a, k3b } \ +} + +#define COMPACT_KEYMAP( \ + k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, \ + k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, \ + k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, \ + k30, k31, k32, k33, k34, k35, km0, km1, k36, k37, k38, k39, k3a, k3b \ +) \ +{ \ + { KC_##k00, KC_##k01, KC_##k02, KC_##k03, KC_##k04, KC_##k05, KC_NO, KC_##k06, KC_##k07, KC_##k08, KC_##k09, KC_##k0a, KC_##k0b }, \ + { KC_##k10, KC_##k11, KC_##k12, KC_##k13, KC_##k14, KC_##k15, KC_NO, KC_##k16, KC_##k17, KC_##k18, KC_##k19, KC_##k1a, KC_##k1b }, \ + { KC_##k20, KC_##k21, KC_##k22, KC_##k23, KC_##k24, KC_##k25, KC_##km0, KC_##k26, KC_##k27, KC_##k28, KC_##k29, KC_##k2a, KC_##k2b }, \ + { KC_##k30, KC_##k31, KC_##k32, KC_##k33, KC_##k34, KC_##k35, KC_##km1, KC_##k36, KC_##k37, KC_##k38, KC_##k39, KC_##k3a, KC_##k3b } \ +} + +#define KC_ KC_TRNS + +#endif diff --git a/keyboards/atreus50/config.h b/keyboards/atreus50/config.h new file mode 100644 index 0000000000..dedcc8caec --- /dev/null +++ b/keyboards/atreus50/config.h @@ -0,0 +1,163 @@ +/* +Copyright 2012 Jun Wako + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 2 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see . +*/ + +#ifndef CONFIG_H +#define CONFIG_H + +#include "config_common.h" + +/* USB Device descriptor parameter */ +#define VENDOR_ID 0xBB80 +#define PRODUCT_ID 0x040D +#define DEVICE_VER 0x0001 +#define MANUFACTURER Hexwire +#define PRODUCT Atreus 50 Keyboard +#define DESCRIPTION Atreus layout with extra column + +/* key matrix size */ +#define MATRIX_ROWS 4 +#define MATRIX_COLS 13 + +/* Planck PCB default pin-out */ +#define MATRIX_ROW_PINS { D3, D2, D1, D0 } +#define MATRIX_COL_PINS { D4, D7, E6, B4, B5, B6, B2, B3, B1, F7, F6, F5, F4 } +#define UNUSED_PINS + +/* COL2ROW or ROW2COL */ +#define DIODE_DIRECTION COL2ROW + +// #define BACKLIGHT_PIN B7 +// #define BACKLIGHT_BREATHING +// #define BACKLIGHT_LEVELS 3 + + +/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */ +#define DEBOUNCING_DELAY 5 + +/* define if matrix has ghost (lacks anti-ghosting diodes) */ +//#define MATRIX_HAS_GHOST + +/* number of backlight levels */ + +/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */ +#define LOCKING_SUPPORT_ENABLE +/* Locking resynchronize hack */ +#define LOCKING_RESYNC_ENABLE + + +/* ws2812 RGB LED */ +#define RGB_DI_PIN C6 +#define RGBLIGHT_TIMER +#define RGBLED_NUM 12 // Number of LEDs +#define RGBLIGHT_HUE_STEP 10 +#define RGBLIGHT_SAT_STEP 17 +#define RGBLIGHT_VAL_STEP 17 + + +/* + * Force NKRO + * + * Force NKRO (nKey Rollover) to be enabled by default, regardless of the saved + * state in the bootmagic EEPROM settings. (Note that NKRO must be enabled in the + * makefile for this to work.) + * + * If forced on, NKRO can be disabled via magic key (default = LShift+RShift+N) + * until the next keyboard reset. + * + * NKRO may prevent your keystrokes from being detected in the BIOS, but it is + * fully operational during normal computer usage. + * + * For a less heavy-handed approach, enable NKRO via magic key (LShift+RShift+N) + * or via bootmagic (hold SPACE+N while plugging in the keyboard). Once set by + * bootmagic, NKRO mode will always be enabled until it is toggled again during a + * power-up. + * + */ +//#define FORCE_NKRO + +/* + * Magic Key Options + * + * Magic keys are hotkey commands that allow control over firmware functions of + * the keyboard. They are best used in combination with the HID Listen program, + * found here: https://www.pjrc.com/teensy/hid_listen.html + * + * The options below allow the magic key functionality to be changed. This is + * useful if your keyboard/keypad is missing keys and you want magic key support. + * + */ + +/* key combination for magic key command */ +#define IS_COMMAND() ( \ + keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \ +) + +/* control how magic key switches layers */ +//#define MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS true +//#define MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS true +//#define MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM false + +/* override magic key keymap */ +//#define MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS +//#define MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS +//#define MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM +//#define MAGIC_KEY_HELP1 H +//#define MAGIC_KEY_HELP2 SLASH +//#define MAGIC_KEY_DEBUG D +//#define MAGIC_KEY_DEBUG_MATRIX X +//#define MAGIC_KEY_DEBUG_KBD K +//#define MAGIC_KEY_DEBUG_MOUSE M +//#define MAGIC_KEY_VERSION V +//#define MAGIC_KEY_STATUS S +//#define MAGIC_KEY_CONSOLE C +//#define MAGIC_KEY_LAYER0_ALT1 ESC +//#define MAGIC_KEY_LAYER0_ALT2 GRAVE +//#define MAGIC_KEY_LAYER0 0 +//#define MAGIC_KEY_LAYER1 1 +//#define MAGIC_KEY_LAYER2 2 +//#define MAGIC_KEY_LAYER3 3 +//#define MAGIC_KEY_LAYER4 4 +//#define MAGIC_KEY_LAYER5 5 +//#define MAGIC_KEY_LAYER6 6 +//#define MAGIC_KEY_LAYER7 7 +//#define MAGIC_KEY_LAYER8 8 +//#define MAGIC_KEY_LAYER9 9 +//#define MAGIC_KEY_BOOTLOADER PAUSE +//#define MAGIC_KEY_LOCK CAPS +//#define MAGIC_KEY_EEPROM E +//#define MAGIC_KEY_NKRO N +//#define MAGIC_KEY_SLEEP_LED Z + +/* + * Feature disable options + * These options are also useful to firmware size reduction. + */ + +/* disable debug print */ +//#define NO_DEBUG + +/* disable print */ +//#define NO_PRINT + +/* disable action features */ +//#define NO_ACTION_LAYER +//#define NO_ACTION_TAPPING +//#define NO_ACTION_ONESHOT +//#define NO_ACTION_MACRO +//#define NO_ACTION_FUNCTION + +#endif diff --git a/keyboards/atreus50/keymaps/default/Makefile b/keyboards/atreus50/keymaps/default/Makefile new file mode 100644 index 0000000000..e8556d0d6a --- /dev/null +++ b/keyboards/atreus50/keymaps/default/Makefile @@ -0,0 +1,6 @@ +RGBLIGHT_ENABLE = no +AUDIO_ENABLE = yes + +ifndef QUANTUM_DIR + include ../../../../Makefile +endif \ No newline at end of file diff --git a/keyboards/atreus50/keymaps/default/keymap.c b/keyboards/atreus50/keymaps/default/keymap.c new file mode 100644 index 0000000000..0a77613c56 --- /dev/null +++ b/keyboards/atreus50/keymaps/default/keymap.c @@ -0,0 +1,270 @@ +#include "atreus50.h" +#include "action_layer.h" +#include "eeconfig.h" +#ifdef AUDIO_ENABLE + #include "audio.h" +#endif + +// Each layer gets a name for readability, which is then used in the keymap matrix below. +// The underscores don't mean anything - you can have a layer called STUFF or any other name. +// Layer names don't all need to be of the same length, obviously, and you can also skip them +// entirely and just use numbers. +#define _QWERTY 0 +#define _COLEMAK 1 +#define _DVORAK 2 +#define _LOWER 3 +#define _RAISE 4 +#define _MOVEMENT 5 +#define _ADJUST 16 + +enum preonic_keycodes { + QWERTY = SAFE_RANGE, + COLEMAK, + DVORAK, + LOWER, + RAISE, + MOVEMENT, + BACKLIT +}; + +// Fillers to make layering more clear +#define _______ KC_TRNS +#define XXXXXXX KC_NO + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + +/* Qwerty + * ,-----------------------------------------------------------------------------------. + * | Tab | Q | W | E | R | T | Y | U | I | O | P | - | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | Esc | A | S | D | F | G | H | J | K | L | ; | " | + * |------+------+------+------+------+------|------+------+------+------+------+------| + * | Shift| Z | X | C | V | B | N | M | , | . | / |Enter | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | ` | Ctrl | Alt | GUI |Lower |Space | Bksp |Raise | Left | Down | Up |Right | + * `-----------------------------------------------------------------------------------' + */ +[_QWERTY] = KEYMAP( \ + KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_MINS, \ + KC_ESC, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, \ + KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT, \ + KC_GRV, KC_LCTL, KC_LALT, KC_LGUI, LOWER, KC_SPC, MO(_MOVEMENT), KC_RSFT, KC_BSPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT \ +), + +/* Colemak + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | Tab | Q | W | F | P | G | J | L | U | Y | ; | - | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | Esc | A | R | S | T | D | H | N | E | I | O | " | + * |------+------+------+------+------+------|------+------+------+------+------+------| + * | Shift| Z | X | C | V | B | K | M | , | . | / |Enter | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | ` | Ctrl | Alt | GUI |Lower | Space |Raise | Left | Down | Up |Right | + * `-----------------------------------------------------------------------------------' + */ +[_COLEMAK] = KEYMAP( \ + KC_TAB, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_MINS, \ + KC_ESC, KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O, KC_QUOT, \ + KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT, \ + KC_GRV, KC_LCTL, KC_LALT, KC_LGUI, LOWER, KC_SPC, MO(_MOVEMENT), KC_RSFT, KC_BSPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT \ +), + +/* Dvorak + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | Tab | " | , | . | P | Y | F | G | C | R | L | - | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | Esc | A | O | E | U | I | D | H | T | N | S | / | + * |------+------+------+------+------+------|------+------+------+------+------+------| + * | Shift| ; | Q | J | K | X | B | M | W | V | Z |Enter | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | ` | Ctrl | Alt | GUI |Lower | Space |Raise | Left | Down | Up |Right | + * `-----------------------------------------------------------------------------------' + */ +[_DVORAK] = KEYMAP( \ + KC_TAB, KC_QUOT, KC_COMM, KC_DOT, KC_P, KC_Y, KC_F, KC_G, KC_C, KC_R, KC_L, KC_MINS, \ + KC_ESC, KC_A, KC_O, KC_E, KC_U, KC_I, KC_D, KC_H, KC_T, KC_N, KC_S, KC_SLSH, \ + KC_LSFT, KC_SCLN, KC_Q, KC_J, KC_K, KC_X, KC_B, KC_M, KC_W, KC_V, KC_Z, KC_ENT, \ + KC_GRV, KC_LCTL, KC_LALT, KC_LGUI, LOWER, KC_SPC, MO(_MOVEMENT), KC_RSFT, KC_BSPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT \ +), + +/* Lower + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | ~ | ! | @ | # | $ | % | ^ | & | * | ( | ) | Del | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | Del | F1 | F2 | F3 | F4 | F5 | F6 | _ | + | { | } | | | + * |------+------+------+------+------+------|------+------+------+------+------+------| + * | | F7 | F8 | F9 | F10 | F11 | F12 |ISO ~ |ISO | | | |Enter | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | | | | | | | | Next | Vol- | Vol+ | Play | + * `-----------------------------------------------------------------------------------' + */ +[_LOWER] = KEYMAP( \ + KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_DEL, \ + KC_DEL, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE, \ + _______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12,S(KC_NUHS),S(KC_NUBS),_______, _______, _______, \ + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY \ +), + +/* Raise + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Del | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | Del | F1 | F2 | F3 | F4 | F5 | F6 | - | = | [ | ] | \ | + * |------+------+------+------+------+------|------+------+------+------+------+------| + * | | F7 | F8 | F9 | F10 | F11 | F12 |ISO # |ISO / | | |Enter | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | | | | | | | | Next | Vol- | Vol+ | Play | + * `-----------------------------------------------------------------------------------' + */ +[_RAISE] = KEYMAP( \ + KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_DEL, \ + KC_DEL, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS, \ + _______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_NUHS, KC_NUBS, _______, _______, _______, \ + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY \ +), + +[_MOVEMENT] = KEYMAP( \ + KC_TILD, KC_EXLM, KC_MUTE, KC_VOLD, KC_VOLU, KC_PERC, KC_CIRC, KC_AMPR, KC_UP, KC_LPRN, KC_RPRN, KC_DEL, \ + KC_DEL, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_LEFT, KC_DOWN, KC_RIGHT, KC_RCBR, KC_PIPE, \ + _______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12,S(KC_NUHS),S(KC_NUBS),_______, _______, _______, \ + _______, _______, _______, _______, _______, _______, _______, _______, KC_PGDOWN, KC_PGUP, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY \ +), + +/* Adjust (Lower + Raise) + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | | Reset| | | | | | | | | | Del | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | | | |Audoff|Aud on|AGnorm|AGswap|Qwerty|Colemk|Dvorak| | | + * |------+------+------+------+------+------|------+------+------+------+------+------| + * | |Voice-|Voice+|Musoff|Mus on| | | | | | | | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | | | | | | | | | | | | + * `-----------------------------------------------------------------------------------' + */ +[_ADJUST] = KEYMAP( \ + _______, RESET, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_DEL, \ + _______, _______, _______, AU_ON, AU_OFF, AG_NORM, AG_SWAP, QWERTY, COLEMAK, DVORAK, _______, _______, \ + _______, MUV_DE, MUV_IN, MU_ON, MU_OFF, MI_ON, MI_OFF, _______, _______, _______, _______, _______, \ + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ \ +) + +}; + +#ifdef AUDIO_ENABLE +float tone_startup[][2] = { + {NOTE_B5, 20}, + {NOTE_B6, 8}, + {NOTE_DS6, 20}, + {NOTE_B6, 8} +}; + +float tone_qwerty[][2] = SONG(QWERTY_SOUND); +float tone_dvorak[][2] = SONG(DVORAK_SOUND); +float tone_colemak[][2] = SONG(COLEMAK_SOUND); + +float tone_goodbye[][2] = SONG(GOODBYE_SOUND); + +float music_scale[][2] = SONG(MUSIC_SCALE_SOUND); +#endif + +void persistant_default_layer_set(uint16_t default_layer) { + eeconfig_update_default_layer(default_layer); + default_layer_set(default_layer); +} + +bool process_record_user(uint16_t keycode, keyrecord_t *record) { + switch (keycode) { + case QWERTY: + if (record->event.pressed) { + #ifdef AUDIO_ENABLE + PLAY_NOTE_ARRAY(tone_qwerty, false, 0); + #endif + persistant_default_layer_set(1UL<<_QWERTY); + } + return false; + break; + case COLEMAK: + if (record->event.pressed) { + #ifdef AUDIO_ENABLE + PLAY_NOTE_ARRAY(tone_colemak, false, 0); + #endif + persistant_default_layer_set(1UL<<_COLEMAK); + } + return false; + break; + case DVORAK: + if (record->event.pressed) { + #ifdef AUDIO_ENABLE + PLAY_NOTE_ARRAY(tone_dvorak, false, 0); + #endif + persistant_default_layer_set(1UL<<_DVORAK); + } + return false; + break; + case LOWER: + if (record->event.pressed) { + layer_on(_LOWER); + update_tri_layer(_LOWER, _RAISE, _ADJUST); + } else { + layer_off(_LOWER); + update_tri_layer(_LOWER, _RAISE, _ADJUST); + } + return false; + break; + case RAISE: + if (record->event.pressed) { + layer_on(_RAISE); + update_tri_layer(_LOWER, _RAISE, _ADJUST); + } else { + layer_off(_RAISE); + update_tri_layer(_LOWER, _RAISE, _ADJUST); + } + return false; + break; + case BACKLIT: + if (record->event.pressed) { + register_code(KC_RSFT); + #ifdef BACKLIGHT_ENABLE + backlight_step(); + #endif + } else { + unregister_code(KC_RSFT); + } + return false; + break; + } + return true; +}; + +void matrix_init_user(void) { + #ifdef AUDIO_ENABLE + startup_user(); + #endif +} + +#ifdef AUDIO_ENABLE + +void startup_user() +{ + _delay_ms(20); // gets rid of tick + PLAY_NOTE_ARRAY(tone_startup, false, 0); +} + +void shutdown_user() +{ + PLAY_NOTE_ARRAY(tone_goodbye, false, 0); + _delay_ms(150); + stop_all_notes(); +} + +void music_on_user(void) +{ + music_scale_user(); +} + +void music_scale_user(void) +{ + PLAY_NOTE_ARRAY(music_scale, false, 0); +} + +#endif \ No newline at end of file diff --git a/keyboards/atreus50/keymaps/default/readme.md b/keyboards/atreus50/keymaps/default/readme.md new file mode 100644 index 0000000000..e911968dd9 --- /dev/null +++ b/keyboards/atreus50/keymaps/default/readme.md @@ -0,0 +1 @@ +# The default Preonic layout - largely based on the Planck's \ No newline at end of file diff --git a/keyboards/atreus50/readme.md b/keyboards/atreus50/readme.md new file mode 100644 index 0000000000..f0be255a09 --- /dev/null +++ b/keyboards/atreus50/readme.md @@ -0,0 +1,25 @@ +Preonic keyboard firmware +====================== +DIY/Assembled compact ortholinear 50% keyboard by [Ortholinear Keyboards](http://ortholinearkeyboards.com). + +## Quantum MK Firmware + +For the full Quantum feature list, see [the parent readme.md](/readme.md). + +## Building + +Download or clone the whole firmware and navigate to the keyboards/preonic folder. Once your dev env is setup, you'll be able to type `make` to generate your .hex - you can then use `make dfu` to program your PCB once you hit the reset button. + +Depending on which keymap you would like to use, you will have to compile slightly differently. + +### Default +To build with the default keymap, simply run `make`. + +### Other Keymaps +Several version of keymap are available in advance but you are recommended to define your favorite layout yourself. To define your own keymap, create a file in the keymaps folder named `.c` and see keymap document (you can find in top readme.md) and existent keymap files. + +To build the firmware binary hex file with a keymap just do `make` with `KEYMAP` option like: +``` +$ make KEYMAP=[default|jack|] +``` +Keymaps follow the format **__\.c__** and are stored in the `keymaps` folder. diff --git a/keyboards/atreus50/rules.mk b/keyboards/atreus50/rules.mk new file mode 100644 index 0000000000..7770ea2a27 --- /dev/null +++ b/keyboards/atreus50/rules.mk @@ -0,0 +1,81 @@ + + +# MCU name +#MCU = at90usb1287 +MCU = atmega32u4 + +# Processor frequency. +# This will define a symbol, F_CPU, in all source code files equal to the +# processor frequency in Hz. You can then use this symbol in your source code to +# calculate timings. Do NOT tack on a 'UL' at the end, this will be done +# automatically to create a 32-bit value in your source code. +# +# This will be an integer division of F_USB below, as it is sourced by +# F_USB after it has run through any CPU prescalers. Note that this value +# does not *change* the processor frequency - it should merely be updated to +# reflect the processor speed set externally so that the code can use accurate +# software delays. +F_CPU = 16000000 + +# +# LUFA specific +# +# Target architecture (see library "Board Types" documentation). +ARCH = AVR8 + +# Input clock frequency. +# This will define a symbol, F_USB, in all source code files equal to the +# input clock frequency (before any prescaling is performed) in Hz. This value may +# differ from F_CPU if prescaling is used on the latter, and is required as the +# raw input clock is fed directly to the PLL sections of the AVR for high speed +# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL' +# at the end, this will be done automatically to create a 32-bit value in your +# source code. +# +# If no clock division is performed on the input clock inside the AVR (via the +# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU. +F_USB = $(F_CPU) + +# Interrupt driven control endpoint task(+60) +OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT + + +# Boot Section Size in *bytes* +# Teensy halfKay 512 +# Teensy++ halfKay 1024 +# Atmel DFU loader 4096 +# LUFA bootloader 4096 +# USBaspLoader 2048 +OPT_DEFS += -DBOOTLOADER_SIZE=4096 + +# Build Options +# change to "no" to disable the options, or define them in the Makefile in +# the appropriate keymap folder that will get included automatically +# +BOOTMAGIC_ENABLE ?= no # Virtual DIP switch configuration(+1000) +MOUSEKEY_ENABLE ?= yes # Mouse keys(+4700) +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 ?= no # 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 +MIDI_ENABLE ?= no # MIDI controls +AUDIO_ENABLE ?= no # 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. + +# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE +SLEEP_LED_ENABLE ?= no # Breathing sleep LED during USB suspend + +avrdude: build + ls /dev/tty* > /tmp/1; \ + echo "Reset your Pro Micro now"; \ + while [[ -z $$USB ]]; do \ + sleep 1; \ + ls /dev/tty* > /tmp/2; \ + USB=`diff /tmp/1 /tmp/2 | grep -o '/dev/tty.*'`; \ + done; \ + avrdude -p $(MCU) -c avr109 -P $$USB -U flash:w:$(BUILD_DIR)/$(TARGET).hex + +.PHONY: avrdude From 0520341ce48e45ddb53a8b26f8710417af6279e6 Mon Sep 17 00:00:00 2001 From: Danny Nguyen Date: Thu, 23 Mar 2017 11:25:21 -0400 Subject: [PATCH 76/91] Cleanup keymap --- keyboards/atreus50/atreus50.c | 2 +- keyboards/atreus50/keymaps/default/keymap.c | 206 +++++++++---------- keyboards/atreus50/keymaps/default/readme.md | 1 - 3 files changed, 94 insertions(+), 115 deletions(-) delete mode 100644 keyboards/atreus50/keymaps/default/readme.md diff --git a/keyboards/atreus50/atreus50.c b/keyboards/atreus50/atreus50.c index 0ec63216f1..225a51bcce 100644 --- a/keyboards/atreus50/atreus50.c +++ b/keyboards/atreus50/atreus50.c @@ -7,4 +7,4 @@ void matrix_init_kb(void) { PORTE |= (1<<6); matrix_init_user(); -}; \ No newline at end of file +}; diff --git a/keyboards/atreus50/keymaps/default/keymap.c b/keyboards/atreus50/keymaps/default/keymap.c index 0a77613c56..8ae096cd83 100644 --- a/keyboards/atreus50/keymaps/default/keymap.c +++ b/keyboards/atreus50/keymaps/default/keymap.c @@ -17,7 +17,7 @@ #define _MOVEMENT 5 #define _ADJUST 16 -enum preonic_keycodes { +enum custom_keycodes { QWERTY = SAFE_RANGE, COLEMAK, DVORAK, @@ -30,123 +30,103 @@ enum preonic_keycodes { // Fillers to make layering more clear #define _______ KC_TRNS #define XXXXXXX KC_NO +#define KC_X0 MT(MOD_LCTL, KC_ESC) // Hold for Left Ctrl, Tap for ESC +#define KC_X1 LOWER +#define KC_X2 RAISE +#define KC_X3 MO(_MOVEMENT) +#define KC_X4 MT(MOD_LSFT, KC_ENT) // Hold for Left Shift, Tap for Enter const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { -/* Qwerty - * ,-----------------------------------------------------------------------------------. - * | Tab | Q | W | E | R | T | Y | U | I | O | P | - | - * |------+------+------+------+------+-------------+------+------+------+------+------| - * | Esc | A | S | D | F | G | H | J | K | L | ; | " | - * |------+------+------+------+------+------|------+------+------+------+------+------| - * | Shift| Z | X | C | V | B | N | M | , | . | / |Enter | - * |------+------+------+------+------+------+------+------+------+------+------+------| - * | ` | Ctrl | Alt | GUI |Lower |Space | Bksp |Raise | Left | Down | Up |Right | - * `-----------------------------------------------------------------------------------' - */ -[_QWERTY] = KEYMAP( \ - KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_MINS, \ - KC_ESC, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, \ - KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT, \ - KC_GRV, KC_LCTL, KC_LALT, KC_LGUI, LOWER, KC_SPC, MO(_MOVEMENT), KC_RSFT, KC_BSPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT \ -), - -/* Colemak - * |------+------+------+------+------+------+------+------+------+------+------+------| - * | Tab | Q | W | F | P | G | J | L | U | Y | ; | - | - * |------+------+------+------+------+-------------+------+------+------+------+------| - * | Esc | A | R | S | T | D | H | N | E | I | O | " | - * |------+------+------+------+------+------|------+------+------+------+------+------| - * | Shift| Z | X | C | V | B | K | M | , | . | / |Enter | - * |------+------+------+------+------+------+------+------+------+------+------+------| - * | ` | Ctrl | Alt | GUI |Lower | Space |Raise | Left | Down | Up |Right | - * `-----------------------------------------------------------------------------------' - */ -[_COLEMAK] = KEYMAP( \ - KC_TAB, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_MINS, \ - KC_ESC, KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O, KC_QUOT, \ - KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT, \ - KC_GRV, KC_LCTL, KC_LALT, KC_LGUI, LOWER, KC_SPC, MO(_MOVEMENT), KC_RSFT, KC_BSPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT \ -), - -/* Dvorak - * |------+------+------+------+------+------+------+------+------+------+------+------| - * | Tab | " | , | . | P | Y | F | G | C | R | L | - | - * |------+------+------+------+------+-------------+------+------+------+------+------| - * | Esc | A | O | E | U | I | D | H | T | N | S | / | - * |------+------+------+------+------+------|------+------+------+------+------+------| - * | Shift| ; | Q | J | K | X | B | M | W | V | Z |Enter | - * |------+------+------+------+------+------+------+------+------+------+------+------| - * | ` | Ctrl | Alt | GUI |Lower | Space |Raise | Left | Down | Up |Right | - * `-----------------------------------------------------------------------------------' - */ -[_DVORAK] = KEYMAP( \ - KC_TAB, KC_QUOT, KC_COMM, KC_DOT, KC_P, KC_Y, KC_F, KC_G, KC_C, KC_R, KC_L, KC_MINS, \ - KC_ESC, KC_A, KC_O, KC_E, KC_U, KC_I, KC_D, KC_H, KC_T, KC_N, KC_S, KC_SLSH, \ - KC_LSFT, KC_SCLN, KC_Q, KC_J, KC_K, KC_X, KC_B, KC_M, KC_W, KC_V, KC_Z, KC_ENT, \ - KC_GRV, KC_LCTL, KC_LALT, KC_LGUI, LOWER, KC_SPC, MO(_MOVEMENT), KC_RSFT, KC_BSPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT \ -), - -/* Lower - * |------+------+------+------+------+-------------+------+------+------+------+------| - * | ~ | ! | @ | # | $ | % | ^ | & | * | ( | ) | Del | - * |------+------+------+------+------+-------------+------+------+------+------+------| - * | Del | F1 | F2 | F3 | F4 | F5 | F6 | _ | + | { | } | | | - * |------+------+------+------+------+------|------+------+------+------+------+------| - * | | F7 | F8 | F9 | F10 | F11 | F12 |ISO ~ |ISO | | | |Enter | - * |------+------+------+------+------+------+------+------+------+------+------+------| - * | | | | | | | | Next | Vol- | Vol+ | Play | - * `-----------------------------------------------------------------------------------' - */ -[_LOWER] = KEYMAP( \ - KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_DEL, \ - KC_DEL, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE, \ - _______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12,S(KC_NUHS),S(KC_NUBS),_______, _______, _______, \ - _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY \ -), - -/* Raise - * |------+------+------+------+------+------+------+------+------+------+------+------| - * | ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Del | - * |------+------+------+------+------+-------------+------+------+------+------+------| - * | Del | F1 | F2 | F3 | F4 | F5 | F6 | - | = | [ | ] | \ | - * |------+------+------+------+------+------|------+------+------+------+------+------| - * | | F7 | F8 | F9 | F10 | F11 | F12 |ISO # |ISO / | | |Enter | - * |------+------+------+------+------+------+------+------+------+------+------+------| - * | | | | | | | | Next | Vol- | Vol+ | Play | - * `-----------------------------------------------------------------------------------' - */ -[_RAISE] = KEYMAP( \ - KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_DEL, \ - KC_DEL, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS, \ - _______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_NUHS, KC_NUBS, _______, _______, _______, \ - _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY \ -), - -[_MOVEMENT] = KEYMAP( \ - KC_TILD, KC_EXLM, KC_MUTE, KC_VOLD, KC_VOLU, KC_PERC, KC_CIRC, KC_AMPR, KC_UP, KC_LPRN, KC_RPRN, KC_DEL, \ - KC_DEL, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_LEFT, KC_DOWN, KC_RIGHT, KC_RCBR, KC_PIPE, \ - _______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12,S(KC_NUHS),S(KC_NUBS),_______, _______, _______, \ - _______, _______, _______, _______, _______, _______, _______, _______, KC_PGDOWN, KC_PGUP, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY \ -), + [_QWERTY] = COMPACT_KEYMAP( + //,----+----+----+----+----+----. ,----+----+----+----+----+----. + TAB , Q , W , E , R , T , Y , U , I , O , P ,MINS, + //|----+----+----+----+----+----| |----+----+----+----+----+----| + X0 , A , S , D , F , G , H , J , K , L ,SCLN,QUOT, + //|----+----+----+----+----+----| |----+----+----+----+----+----| + LSFT, Z , X , C , V , B , N , M ,COMM,DOT ,SLSH, X4 , + //|----+----+----+----+----+----|----+----|----+----+----+----+----+----| + GRV ,LCTL,LALT,LGUI, X1 ,SPC , X3 ,RSFT,BSPC, X2 ,LEFT,DOWN, UP ,RGHT + //`----+----+----+----+----+----+----+----+----+----+----+----+----+----' + ), + + [_COLEMAK] = COMPACT_KEYMAP( + //,----+----+----+----+----+----. ,----+----+----+----+----+----. + TAB , Q , W , F , P , G , J , L , U , Y ,SCLN,MINS, + //|----+----+----+----+----+----| |----+----+----+----+----+----| + X0 , A , R , S , T , D , H , N , E , I , O ,QUOT, + //|----+----+----+----+----+----| |----+----+----+----+----+----| + LSFT, Z , X , C , V , B , K , M ,COMM,DOT ,SLSH, X4 , + //|----+----+----+----+----+----|----+----|----+----+----+----+----+----| + GRV ,LCTL,LALT,LGUI, X1 ,SPC , X3 ,RSFT,BSPC, X2 ,LEFT,DOWN, UP ,RGHT + //`----+----+----+----+----+----+----+----+----+----+----+----+----+----' + ), + + [_DVORAK] = COMPACT_KEYMAP( + //,----+----+----+----+----+----. ,----+----+----+----+----+----. + TAB ,QUOT,COMM,DOT , P , Y , F , G , C , R , L ,MINS, + //|----+----+----+----+----+----| |----+----+----+----+----+----| + X0 , A , O , E , U , I , D , H , R , N , S ,SLSH, + //|----+----+----+----+----+----| |----+----+----+----+----+----| + LSFT,SCLN, Q , J , K , X , B , M , W , V , Z , X4 , + //|----+----+----+----+----+----|----+----|----+----+----+----+----+----| + GRV ,LCTL,LALT,LGUI, X1 ,SPC , X3 ,RSFT,BSPC, X2 ,LEFT,DOWN, UP ,RGHT + //`----+----+----+----+----+----+----+----+----+----+----+----+----+----' + ), + + [_LOWER] = COMPACT_KEYMAP( + //,----+----+----+----+----+----. ,----+----+----+----+----+----. + TILD,EXLM, AT ,HASH,DLR ,PERC, CIRC,AMPR,ASTR,LPRN,RPRN,DEL , + //|----+----+----+----+----+----| |----+----+----+----+----+----| + DEL , F1 , F2 , F3 , F4 , F5 , F6 ,UNDS,PLUS,LCBR,RCBR,PIPE, + //|----+----+----+----+----+----| |----+----+----+----+----+----| + , F7 , F8 , F9 ,F10 ,F11 , F12 ,END , , , , , + //|----+----+----+----+----+----|----+----|----+----+----+----+----+----| + , , , , , , , , , ,MNXT,VOLD,VOLU,MPLY + //`----+----+----+----+----+----+----+----+----+----+----+----+----+----' + ), + + [_RAISE] = COMPACT_KEYMAP( + //,----+----+----+----+----+----. ,----+----+----+----+----+----. + GRV , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 0 ,DEL , + //|----+----+----+----+----+----| |----+----+----+----+----+----| + DEL , F1 , F2 , F3 , F4 , F5 , F6 ,MINS,EQL ,LBRC,RBRC,BSLS, + //|----+----+----+----+----+----| |----+----+----+----+----+----| + , F7 , F8 , F9 ,F10 ,F11 , F12 ,NUHS,NUBS, , , , + //|----+----+----+----+----+----|----+----|----+----+----+----+----+----| + , , , , , , , , , ,MNXT,VOLD,VOLU,MPLY + //`----+----+----+----+----+----+----+----+----+----+----+----+----+----' + ), + + [_MOVEMENT] = COMPACT_KEYMAP( + //,----+----+----+----+----+----. ,----+----+----+----+----+----. + TILD,EXLM, AT ,HASH,DLR ,PERC, CIRC,AMPR, UP ,LPRN,RPRN,DEL , + //|----+----+----+----+----+----| |----+----+----+----+----+----| + DEL , F1 , F2 , F3 , F4 , F5 , F6 ,LEFT,DOWN,RGHT,RCBR,PIPE, + //|----+----+----+----+----+----| |----+----+----+----+----+----| + , F7 , F8 , F9 ,F10 ,F11 , F12 ,END , , , , , + //|----+----+----+----+----+----|----+----|----+----+----+----+----+----| + , , , , , , , ,PGDN,PGUP,MNXT,VOLD,VOLU,MPLY + //`----+----+----+----+----+----+----+----+----+----+----+----+----+----' + ), /* Adjust (Lower + Raise) - * |------+------+------+------+------+------+------+------+------+------+------+------| - * | | Reset| | | | | | | | | | Del | - * |------+------+------+------+------+-------------+------+------+------+------+------| - * | | | |Audoff|Aud on|AGnorm|AGswap|Qwerty|Colemk|Dvorak| | | - * |------+------+------+------+------+------|------+------+------+------+------+------| - * | |Voice-|Voice+|Musoff|Mus on| | | | | | | | - * |------+------+------+------+------+------+------+------+------+------+------+------| - * | | | | | | | | | | | | - * `-----------------------------------------------------------------------------------' + * |------+------+------+------+------+------. ,------+------+------+------+------+------| + * | | Reset| | | | | | | | | | | Del | + * |------+------+------+------+------+------| |------+------+------+------+------+------| + * | | | |Audoff|Aud on|AGnorm| |AGswap|Qwerty|Colemk|Dvorak| | | + * |------+------+------+------+------+------| |------+------+------+------+------+------| + * | |Voice-|Voice+|Musoff|Mus on| | | | | | | | | + * |------+------+------+------+------+------+------+------+------+------+------+------+------+------| + * | | | | | | | | | | | | | | | + * `-------------------------------------------------------------------------------------------------' */ -[_ADJUST] = KEYMAP( \ - _______, RESET, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_DEL, \ - _______, _______, _______, AU_ON, AU_OFF, AG_NORM, AG_SWAP, QWERTY, COLEMAK, DVORAK, _______, _______, \ - _______, MUV_DE, MUV_IN, MU_ON, MU_OFF, MI_ON, MI_OFF, _______, _______, _______, _______, _______, \ - _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ \ -) + [_ADJUST] = KEYMAP( \ + _______, RESET, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_DEL, \ + _______, _______, _______, AU_ON, AU_OFF, AG_NORM, AG_SWAP, QWERTY, COLEMAK, DVORAK, _______, _______, \ + _______, MUV_DE, MUV_IN, MU_ON, MU_OFF, MI_ON, MI_OFF, _______, _______, _______, _______, _______, \ + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ \ + ) }; @@ -267,4 +247,4 @@ void music_scale_user(void) PLAY_NOTE_ARRAY(music_scale, false, 0); } -#endif \ No newline at end of file +#endif diff --git a/keyboards/atreus50/keymaps/default/readme.md b/keyboards/atreus50/keymaps/default/readme.md deleted file mode 100644 index e911968dd9..0000000000 --- a/keyboards/atreus50/keymaps/default/readme.md +++ /dev/null @@ -1 +0,0 @@ -# The default Preonic layout - largely based on the Planck's \ No newline at end of file From 63e47a642536ca7af22ef353cf7d19677f48b013 Mon Sep 17 00:00:00 2001 From: Danny Nguyen Date: Thu, 23 Mar 2017 12:23:20 -0400 Subject: [PATCH 77/91] =?UTF-8?q?Add=20RGB=20support=20for=20Let=E2=80=99s?= =?UTF-8?q?=20Split=20v1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- keyboards/lets_split/keymaps/hexwire/config.h | 1 - keyboards/lets_split/rev1/config.h | 7 +++++++ 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/keyboards/lets_split/keymaps/hexwire/config.h b/keyboards/lets_split/keymaps/hexwire/config.h index 38b57266a4..9c8c6d7f40 100644 --- a/keyboards/lets_split/keymaps/hexwire/config.h +++ b/keyboards/lets_split/keymaps/hexwire/config.h @@ -21,7 +21,6 @@ along with this program. If not, see . #define TAPPING_TERM 150 #undef RGBLED_NUM -#define RGB_DI_PIN B0 #define RGBLIGHT_ANIMATIONS #define RGBLED_NUM 8 #define RGBLIGHT_HUE_STEP 8 diff --git a/keyboards/lets_split/rev1/config.h b/keyboards/lets_split/rev1/config.h index 2f5bde9531..5fb87cf5d7 100644 --- a/keyboards/lets_split/rev1/config.h +++ b/keyboards/lets_split/rev1/config.h @@ -63,6 +63,13 @@ along with this program. If not, see . keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \ ) +/* ws2812 RGB LED */ +#define RGB_DI_PIN D3 +#define RGBLIGHT_TIMER +#define RGBLED_NUM 16 // Number of LEDs +#define ws2812_PORTREG PORTD +#define ws2812_DDRREG DDRD + /* * Feature disable options * These options are also useful to firmware size reduction. From 8775a13658146b7ffc90ac20579c1996bd51e909 Mon Sep 17 00:00:00 2001 From: Danny Nguyen Date: Thu, 23 Mar 2017 14:46:58 -0400 Subject: [PATCH 78/91] Add RGB support --- keyboards/atreus50/config.h | 2 +- keyboards/atreus50/keymaps/default/Makefile | 4 ++-- keyboards/atreus50/keymaps/default/keymap.c | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/keyboards/atreus50/config.h b/keyboards/atreus50/config.h index dedcc8caec..2e34e0f898 100644 --- a/keyboards/atreus50/config.h +++ b/keyboards/atreus50/config.h @@ -61,7 +61,7 @@ along with this program. If not, see . /* ws2812 RGB LED */ #define RGB_DI_PIN C6 -#define RGBLIGHT_TIMER +#define RGBLIGHT_ANIMATIONS #define RGBLED_NUM 12 // Number of LEDs #define RGBLIGHT_HUE_STEP 10 #define RGBLIGHT_SAT_STEP 17 diff --git a/keyboards/atreus50/keymaps/default/Makefile b/keyboards/atreus50/keymaps/default/Makefile index e8556d0d6a..d7b0fa7fd8 100644 --- a/keyboards/atreus50/keymaps/default/Makefile +++ b/keyboards/atreus50/keymaps/default/Makefile @@ -1,5 +1,5 @@ -RGBLIGHT_ENABLE = no -AUDIO_ENABLE = yes +RGBLIGHT_ENABLE = yes +AUDIO_ENABLE = no ifndef QUANTUM_DIR include ../../../../Makefile diff --git a/keyboards/atreus50/keymaps/default/keymap.c b/keyboards/atreus50/keymaps/default/keymap.c index 8ae096cd83..415405ec23 100644 --- a/keyboards/atreus50/keymaps/default/keymap.c +++ b/keyboards/atreus50/keymaps/default/keymap.c @@ -122,7 +122,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * `-------------------------------------------------------------------------------------------------' */ [_ADJUST] = KEYMAP( \ - _______, RESET, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_DEL, \ + _______, RESET, RGB_TOG, RGB_MOD, RGB_HUD, RGB_HUI, RGB_SAD, RGB_SAI, RGB_VAD, RGB_VAI, _______, KC_DEL, \ _______, _______, _______, AU_ON, AU_OFF, AG_NORM, AG_SWAP, QWERTY, COLEMAK, DVORAK, _______, _______, \ _______, MUV_DE, MUV_IN, MU_ON, MU_OFF, MI_ON, MI_OFF, _______, _______, _______, _______, _______, \ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ \ From ddc036b69ea508750f5129d9a43fee484148716a Mon Sep 17 00:00:00 2001 From: Travis La Marr Date: Fri, 24 Mar 2017 12:53:55 -0400 Subject: [PATCH 79/91] Refactor Bluetooth Handling Refactored Bluetooth support to make adding new Bluetooth modules easier in the future. * Remove `OUT_BLE` key from QMK's keymap. `OUT_BT` is all we need now as there's no difference anymore. * Made BLUETOOTH_ENABLE build option legacy as not to break existing keymaps (Falls back to existing EZ Key support if on) * Removed `ADAFRUIT_BLE_ENABLE` build option * Created new build option `BLUETOOTH` with module option (Currently `AdafruitEZKey` & `AdafruitBLE`) * Moved all LUFA bluetooth key/mouse events under `BLUETOOTH_ENABLE` ifdef with selected modules output. --- quantum/quantum.c | 8 --- quantum/quantum_keycodes.h | 3 -- tmk_core/common.mk | 12 +++-- tmk_core/protocol/lufa.mk | 12 +++-- tmk_core/protocol/lufa/adafruit_ble.h | 4 +- tmk_core/protocol/lufa/lufa.c | 77 ++++++++++++--------------- tmk_core/protocol/lufa/outputselect.c | 6 +-- tmk_core/protocol/lufa/outputselect.h | 1 - 8 files changed, 57 insertions(+), 66 deletions(-) diff --git a/quantum/quantum.c b/quantum/quantum.c index 582f8920b1..807a7084a9 100644 --- a/quantum/quantum.c +++ b/quantum/quantum.c @@ -294,14 +294,6 @@ bool process_record_quantum(keyrecord_t *record) { return false; break; #endif - #ifdef ADAFRUIT_BLE_ENABLE - case OUT_BLE: - if (record->event.pressed) { - set_output(OUTPUT_ADAFRUIT_BLE); - } - return false; - break; - #endif #endif case MAGIC_SWAP_CONTROL_CAPSLOCK ... MAGIC_TOGGLE_NKRO: if (record->event.pressed) { diff --git a/quantum/quantum_keycodes.h b/quantum/quantum_keycodes.h index 903d57f1ee..78b02a0deb 100644 --- a/quantum/quantum_keycodes.h +++ b/quantum/quantum_keycodes.h @@ -159,9 +159,6 @@ enum quantum_keycodes { #ifdef BLUETOOTH_ENABLE OUT_BT, #endif -#ifdef ADAFRUIT_BLE_ENABLE - OUT_BLE, -#endif // always leave at the end SAFE_RANGE diff --git a/tmk_core/common.mk b/tmk_core/common.mk index a86dccc616..2b0fda5f2d 100644 --- a/tmk_core/common.mk +++ b/tmk_core/common.mk @@ -93,14 +93,18 @@ ifeq ($(strip $(BACKLIGHT_ENABLE)), yes) TMK_COMMON_DEFS += -DBACKLIGHT_ENABLE endif -ifeq ($(strip $(ADAFRUIT_BLE_ENABLE)), yes) - TMK_COMMON_DEFS += -DADAFRUIT_BLE_ENABLE -endif - ifeq ($(strip $(BLUETOOTH_ENABLE)), yes) TMK_COMMON_DEFS += -DBLUETOOTH_ENABLE endif +ifeq ($(strip $(BLUETOOTH)), AdafruitBLE) + TMK_COMMON_DEFS += -DBLUETOOTH_ENABLE +endif + +ifeq ($(strip $(BLUETOOTH)), AdafruitEZKey) + TMK_COMMON_DEFS += -DBLUETOOTH_ENABLE +endif + ifeq ($(strip $(ONEHAND_ENABLE)), yes) TMK_COMMON_DEFS += -DONEHAND_ENABLE endif diff --git a/tmk_core/protocol/lufa.mk b/tmk_core/protocol/lufa.mk index de0cc795f6..5b15779723 100644 --- a/tmk_core/protocol/lufa.mk +++ b/tmk_core/protocol/lufa.mk @@ -22,11 +22,16 @@ ifeq ($(strip $(MIDI_ENABLE)), yes) include $(TMK_PATH)/protocol/midi.mk endif -ifeq ($(strip $(ADAFRUIT_BLE_ENABLE)), yes) - LUFA_SRC += $(LUFA_DIR)/adafruit_ble.cpp +ifeq ($(strip $(BLUETOOTH_ENABLE)), yes) + LUFA_SRC += $(LUFA_DIR)/bluetooth.c \ + $(TMK_DIR)/protocol/serial_uart.c endif -ifeq ($(strip $(BLUETOOTH_ENABLE)), yes) +ifeq ($(strip $(BLUETOOTH)), AdafruitBLE) + LUFA_SRC += $(LUFA_DIR)/adafruit_ble.cpp +endif + +ifeq ($(strip $(BLUETOOTH)), AdafruitEZKey) LUFA_SRC += $(LUFA_DIR)/bluetooth.c \ $(TMK_DIR)/protocol/serial_uart.c endif @@ -54,6 +59,7 @@ LUFA_OPTS += -DUSE_FLASH_DESCRIPTORS LUFA_OPTS += -DUSE_STATIC_OPTIONS="(USB_DEVICE_OPT_FULLSPEED | USB_OPT_REG_ENABLED | USB_OPT_AUTO_PLL)" #LUFA_OPTS += -DINTERRUPT_CONTROL_ENDPOINT LUFA_OPTS += -DFIXED_CONTROL_ENDPOINT_SIZE=8 +LUFA_OPTS += -DFIXED_CONTROL_ENDPOINT_SIZE=8 LUFA_OPTS += -DFIXED_NUM_CONFIGURATIONS=1 # Remote wakeup fix for ATmega32U2 https://github.com/tmk/tmk_keyboard/issues/361 diff --git a/tmk_core/protocol/lufa/adafruit_ble.h b/tmk_core/protocol/lufa/adafruit_ble.h index 351fd55ae9..b3bab3ca09 100644 --- a/tmk_core/protocol/lufa/adafruit_ble.h +++ b/tmk_core/protocol/lufa/adafruit_ble.h @@ -3,7 +3,7 @@ * Supports the Adafruit BLE board built around the nRF51822 chip. */ #pragma once -#ifdef ADAFRUIT_BLE_ENABLE +#ifdef MODULE_ADAFRUIT_BLE #include #include #include @@ -57,4 +57,4 @@ extern bool adafruit_ble_set_power_level(int8_t level); } #endif -#endif // ADAFRUIT_BLE_ENABLE +#endif // MODULE_ADAFRUIT_BLE diff --git a/tmk_core/protocol/lufa/lufa.c b/tmk_core/protocol/lufa/lufa.c index ba49284c9b..d71748ce3c 100644 --- a/tmk_core/protocol/lufa/lufa.c +++ b/tmk_core/protocol/lufa/lufa.c @@ -67,10 +67,11 @@ #endif #ifdef BLUETOOTH_ENABLE - #include "bluetooth.h" -#endif -#ifdef ADAFRUIT_BLE_ENABLE + #ifdef MODULE_ADAFRUIT_BLE #include "adafruit_ble.h" + #else + #include "bluetooth.h" + #endif #endif #ifdef VIRTSER_ENABLE @@ -602,18 +603,14 @@ static void send_keyboard(report_keyboard_t *report) uint8_t where = where_to_send(); #ifdef BLUETOOTH_ENABLE - if (where == OUTPUT_BLUETOOTH || where == OUTPUT_USB_AND_BT) { - bluefruit_serial_send(0xFD); - for (uint8_t i = 0; i < KEYBOARD_EPSIZE; i++) { - bluefruit_serial_send(report->raw[i]); - } - } -#endif - -#ifdef ADAFRUIT_BLE_ENABLE - if (where == OUTPUT_ADAFRUIT_BLE) { - adafruit_ble_send_keys(report->mods, report->keys, sizeof(report->keys)); + #ifdef MODULE_ADAFRUIT_BLE + adafruit_ble_send_keys(report->mods, report->keys, sizeof(report->keys)); + #else + bluefruit_serial_send(0xFD); + for (uint8_t i = 0; i < KEYBOARD_EPSIZE; i++) { + bluefruit_serial_send(report->raw[i]); } + #endif #endif if (where != OUTPUT_USB && where != OUTPUT_USB_AND_BT) { @@ -660,24 +657,22 @@ static void send_mouse(report_mouse_t *report) uint8_t where = where_to_send(); #ifdef BLUETOOTH_ENABLE - if (where == OUTPUT_BLUETOOTH || where == OUTPUT_USB_AND_BT) { - bluefruit_serial_send(0xFD); - bluefruit_serial_send(0x00); - bluefruit_serial_send(0x03); - bluefruit_serial_send(report->buttons); - bluefruit_serial_send(report->x); - bluefruit_serial_send(report->y); - bluefruit_serial_send(report->v); // should try sending the wheel v here - bluefruit_serial_send(report->h); // should try sending the wheel h here - bluefruit_serial_send(0x00); - } -#endif - -#ifdef ADAFRUIT_BLE_ENABLE - if (where == OUTPUT_ADAFRUIT_BLE) { + if (where == OUTPUT_BLUETOOTH || where == OUTPUT_USB_AND_BT) { + #ifdef MODULE_ADAFRUIT_BLE // FIXME: mouse buttons adafruit_ble_send_mouse_move(report->x, report->y, report->v, report->h); - } + #else + bluefruit_serial_send(0xFD); + bluefruit_serial_send(0x00); + bluefruit_serial_send(0x03); + bluefruit_serial_send(report->buttons); + bluefruit_serial_send(report->x); + bluefruit_serial_send(report->y); + bluefruit_serial_send(report->v); // should try sending the wheel v here + bluefruit_serial_send(report->h); // should try sending the wheel h here + bluefruit_serial_send(0x00); + #endif + } #endif if (where != OUTPUT_USB && where != OUTPUT_USB_AND_BT) { @@ -727,6 +722,9 @@ static void send_consumer(uint16_t data) #ifdef BLUETOOTH_ENABLE if (where == OUTPUT_BLUETOOTH || where == OUTPUT_USB_AND_BT) { + #ifdef MODULE_ADAFRUIT_BLE + adafruit_ble_send_consumer_key(data, 0); + #else static uint16_t last_data = 0; if (data == last_data) return; last_data = data; @@ -740,12 +738,7 @@ static void send_consumer(uint16_t data) bluefruit_serial_send(0x00); bluefruit_serial_send(0x00); bluefruit_serial_send(0x00); - } -#endif - -#ifdef ADAFRUIT_BLE_ENABLE - if (where == OUTPUT_ADAFRUIT_BLE) { - adafruit_ble_send_consumer_key(data, 0); + #endif } #endif @@ -1130,10 +1123,6 @@ int main(void) // midi_send_noteoff(&midi_device, 0, 64, 127); #endif -#ifdef BLUETOOTH_ENABLE - serial_init(); -#endif - /* wait for USB startup & debug output */ #ifdef WAIT_FOR_USB @@ -1161,7 +1150,7 @@ int main(void) print("Keyboard start.\n"); while (1) { - #if !defined(BLUETOOTH_ENABLE) && !defined(ADAFRUIT_BLE_ENABLE) + #if !defined(BLUETOOTH_ENABLE) while (USB_DeviceState == DEVICE_STATE_Suspended) { print("[s]"); suspend_power_down(); @@ -1182,7 +1171,11 @@ int main(void) rgblight_task(); #endif -#ifdef ADAFRUIT_BLE_ENABLE +#ifdef MODULE_ADAFRUIT_EZKEY + serial_init(); +#endif + +#ifdef MODULE_ADAFRUIT_BLE adafruit_ble_task(); #endif diff --git a/tmk_core/protocol/lufa/outputselect.c b/tmk_core/protocol/lufa/outputselect.c index 5d2457bfff..0df5d3b75a 100644 --- a/tmk_core/protocol/lufa/outputselect.c +++ b/tmk_core/protocol/lufa/outputselect.c @@ -14,7 +14,7 @@ along with this program. If not, see . #include "lufa.h" #include "outputselect.h" -#ifdef ADAFRUIT_BLE_ENABLE +#ifdef MODULE_ADAFRUIT_BLE #include "adafruit_ble.h" #endif @@ -34,9 +34,9 @@ uint8_t auto_detect_output(void) { return OUTPUT_USB; } -#ifdef ADAFRUIT_BLE_ENABLE +#ifdef MODULE_ADAFRUIT_BLE if (adafruit_ble_is_connected()) { - return OUTPUT_ADAFRUIT_BLE; + return OUTPUT_BLUETOOTH; } #endif diff --git a/tmk_core/protocol/lufa/outputselect.h b/tmk_core/protocol/lufa/outputselect.h index 79b4dd35dd..28cc3298e6 100644 --- a/tmk_core/protocol/lufa/outputselect.h +++ b/tmk_core/protocol/lufa/outputselect.h @@ -18,7 +18,6 @@ enum outputs { OUTPUT_NONE, OUTPUT_USB, OUTPUT_BLUETOOTH, - OUTPUT_ADAFRUIT_BLE, // backward compatibility OUTPUT_USB_AND_BT From b4ac0598fa5a69418d79f78c0cf323307d5f5f5e Mon Sep 17 00:00:00 2001 From: Travis La Marr Date: Fri, 24 Mar 2017 15:55:02 -0400 Subject: [PATCH 80/91] Readd bluetooth output direction on standard key input. --- tmk_core/protocol/lufa/lufa.c | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/tmk_core/protocol/lufa/lufa.c b/tmk_core/protocol/lufa/lufa.c index d71748ce3c..3d7a8cc43e 100644 --- a/tmk_core/protocol/lufa/lufa.c +++ b/tmk_core/protocol/lufa/lufa.c @@ -603,14 +603,16 @@ static void send_keyboard(report_keyboard_t *report) uint8_t where = where_to_send(); #ifdef BLUETOOTH_ENABLE - #ifdef MODULE_ADAFRUIT_BLE - adafruit_ble_send_keys(report->mods, report->keys, sizeof(report->keys)); - #else - bluefruit_serial_send(0xFD); - for (uint8_t i = 0; i < KEYBOARD_EPSIZE; i++) { - bluefruit_serial_send(report->raw[i]); - } - #endif + if (where == OUTPUT_BLUETOOTH || where == OUTPUT_USB_AND_BT) { + #ifdef MODULE_ADAFRUIT_BLE + adafruit_ble_send_keys(report->mods, report->keys, sizeof(report->keys)); + #else + bluefruit_serial_send(0xFD); + for (uint8_t i = 0; i < KEYBOARD_EPSIZE; i++) { + bluefruit_serial_send(report->raw[i]); + } + #endif + } #endif if (where != OUTPUT_USB && where != OUTPUT_USB_AND_BT) { From 43eee52cba8db46e9f305a56ca6623428e28cc2e Mon Sep 17 00:00:00 2001 From: Travis La Marr Date: Fri, 24 Mar 2017 17:14:57 -0400 Subject: [PATCH 81/91] Add BLE and EZKey module defines. Also restored serial init back to original location. Was getting junk data. --- tmk_core/common.mk | 2 ++ tmk_core/protocol/lufa/lufa.c | 8 ++++---- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/tmk_core/common.mk b/tmk_core/common.mk index 2b0fda5f2d..47f6fc5719 100644 --- a/tmk_core/common.mk +++ b/tmk_core/common.mk @@ -99,10 +99,12 @@ endif ifeq ($(strip $(BLUETOOTH)), AdafruitBLE) TMK_COMMON_DEFS += -DBLUETOOTH_ENABLE + TMK_COMMON_DEFS += -DMODULE_ADAFRUIT_BLE endif ifeq ($(strip $(BLUETOOTH)), AdafruitEZKey) TMK_COMMON_DEFS += -DBLUETOOTH_ENABLE + TMK_COMMON_DEFS += -DMODULE_ADAFRUIT_EZKEY endif ifeq ($(strip $(ONEHAND_ENABLE)), yes) diff --git a/tmk_core/protocol/lufa/lufa.c b/tmk_core/protocol/lufa/lufa.c index 3d7a8cc43e..4cb23ebc80 100644 --- a/tmk_core/protocol/lufa/lufa.c +++ b/tmk_core/protocol/lufa/lufa.c @@ -1125,6 +1125,10 @@ int main(void) // midi_send_noteoff(&midi_device, 0, 64, 127); #endif +#ifdef MODULE_ADAFRUIT_EZKEY + serial_init(); +#endif + /* wait for USB startup & debug output */ #ifdef WAIT_FOR_USB @@ -1173,10 +1177,6 @@ int main(void) rgblight_task(); #endif -#ifdef MODULE_ADAFRUIT_EZKEY - serial_init(); -#endif - #ifdef MODULE_ADAFRUIT_BLE adafruit_ble_task(); #endif From 739249ff0d707a9702771236fcf22538e3a7106b Mon Sep 17 00:00:00 2001 From: Nicolas Guelpa Date: Fri, 24 Mar 2017 20:18:59 -0400 Subject: [PATCH 82/91] Adding different layer --- keyboards/xd60/keymaps/cheese/keymap.c | 67 ++++++++++++++++++++++++++ 1 file changed, 67 insertions(+) create mode 100644 keyboards/xd60/keymaps/cheese/keymap.c diff --git a/keyboards/xd60/keymaps/cheese/keymap.c b/keyboards/xd60/keymaps/cheese/keymap.c new file mode 100644 index 0000000000..7380093041 --- /dev/null +++ b/keyboards/xd60/keymaps/cheese/keymap.c @@ -0,0 +1,67 @@ +#include "xd60.h" +#include "action_layer.h" + +// Each layer gets a name for readability. +// The underscores don't mean anything - you can +// have a layer called STUFF or any other name. +// Layer names don't all need to be of the same +// length, and you can also skip them entirely +// and just use numbers. +#define _BL 0 +#define _FL 1 +#define _LS 2 +#define _RS 3 + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + + /* (Base Layer) Default Layer + * ,-----------------------------------------------------------. + * |Esc~| 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| =|Backsp | + * |-----------------------------------------------------------| + * |Tab | Q| W| E| R| T| Y| U| I| O| P| [| ]| \ | + * |-----------------------------------------------------------| + * |CAPS | A| S| D| F| G| H| J| K| L| ;| '|Return | + * |-----------------------------------------------------------| + * |Shift | Z| X| C| V| B| N| M| ,| .| /|Shift | + * |-----------------------------------------------------------| + * |Ctrl|Gui |Alt | Space |FN|Left|Up|Down|Right| + * `-----------------------------------------------------------' + */ + [_BL] = KEYMAP( + KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_BSPC, \ + KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, \ + MO(_FL), KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NO, KC_ENT, \ + F(0), KC_NO, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, F(1), F(1), F(1), \ + KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, MO(_FL), KC_LEFT, KC_UP, KC_DOWN, KC_RIGHT), + +// Function Layer + [_FL] = KEYMAP( + KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL, KC_DEL, \ + KC_TRNS, KC_MPRV, KC_MPLY, KC_MNXT, KC_TRNS, KC_CALC, KC_INS, KC_PGUP, KC_UP, KC_PGDN, KC_PSCR, KC_SLCK, KC_PAUS, KC_TRNS, \ + KC_TRNS, KC_VOLD, KC_MUTE, KC_VOLU, KC_TRNS, KC_TRNS, KC_HOME, KC_LEFT, KC_DOWN, KC_RGHT, KC_END, KC_TRNS, KC_TRNS, KC_TRNS, \ + KC_TRNS, KC_TRNS, KC_APP, KC_TRNS, RGB_TOG, RGB_MOD, RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, RGB_VAI, RGB_VAD, KC_TRNS, KC_TRNS, KC_TRNS, \ + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_HOME, KC_PGUP, KC_PGDN, KC_END), + +// Left Shift Layer + [_LS] = KEYMAP( + KC_GRV, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, \ + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, \ + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, \ + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_CAPS, KC_CAPS, KC_CAPS, \ + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS), + +// Right Shift Layer + [_RS] = KEYMAP( + KC_GRV, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, \ + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, \ + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, \ + KC_CAPS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, \ + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS), + +}; + +// Custom Actions +const uint16_t PROGMEM fn_actions[] = { + [0] = ACTION_LAYER_MODS(_LS, MOD_LSFT), + [1] = ACTION_LAYER_MODS(_RS, MOD_RSFT), +}; From c0a6c5f80601ed040be0adfe183c9b672aa7fa50 Mon Sep 17 00:00:00 2001 From: Nicolas Guelpa Date: Sun, 26 Mar 2017 15:07:19 -0400 Subject: [PATCH 83/91] fixing layout --- keyboards/xd60/keymaps/cheese/keymap.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/keyboards/xd60/keymaps/cheese/keymap.c b/keyboards/xd60/keymaps/cheese/keymap.c index 7380093041..25919a41f4 100644 --- a/keyboards/xd60/keymaps/cheese/keymap.c +++ b/keyboards/xd60/keymaps/cheese/keymap.c @@ -20,7 +20,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * |-----------------------------------------------------------| * |Tab | Q| W| E| R| T| Y| U| I| O| P| [| ]| \ | * |-----------------------------------------------------------| - * |CAPS | A| S| D| F| G| H| J| K| L| ;| '|Return | + * |FUNCTION| A| S| D| F| G| H| J| K| L| ;| '|Return| * |-----------------------------------------------------------| * |Shift | Z| X| C| V| B| N| M| ,| .| /|Shift | * |-----------------------------------------------------------| From a89ee25db8eb57b902e0fc1a16166d16af0dc721 Mon Sep 17 00:00:00 2001 From: Nicolas Guelpa Date: Sun, 26 Mar 2017 15:16:55 -0400 Subject: [PATCH 84/91] Add files via upload --- keyboards/xd60/keymaps/cheese/base_layout.png | Bin 0 -> 23729 bytes keyboards/xd60/keymaps/cheese/fn_layout.png | Bin 0 -> 20690 bytes 2 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 keyboards/xd60/keymaps/cheese/base_layout.png create mode 100644 keyboards/xd60/keymaps/cheese/fn_layout.png diff --git a/keyboards/xd60/keymaps/cheese/base_layout.png b/keyboards/xd60/keymaps/cheese/base_layout.png new file mode 100644 index 0000000000000000000000000000000000000000..211c4c731e6a90587fe1024d996a73744479b123 GIT binary patch literal 23729 zcmd?RWpEtJwk{~Ln3H5v7P$c2{QB%2gHl!Kw&Fc?kqqTv!kg5Ckbn(T^Y?;Nl=4pw!Tiz!o2|T|5vF zVh|}&Ar%kMbAYY|-tyYRi-P;5xNVY#t+V?3O^t-Z?SumT>; zm7R~N$Gw@*Hqb-mz6Rlapd!uXB#=<(El8B)Lj}8H!(7NkDt01DIXnwA%%kVQ74~am zF;Ai=^PPS;s||Oi+ASaEs=n(R@HU!FYAxS&)@ZUWSH*GFH8eDUy-Ef^{Bal%p?R1Q zoyjjs{p|~4k$^xHg22E1dK-UY-?f1WG|Mv9`y?eTi# z|4N0nP7ONe5Bz9H+GcbXLD*}!_seh2|Z!?>Pp{}1YqqRGFCtg4+{p0UpHsFB3#=Z!} zohJG7dS);{A;mjbsFMHIzJdXI0A9PgJrIVZ?)T#$wc)M%_2~?wbsb>Do~aH3eOEf_ zbGgx;Y~TH(L{k5>m`{67Z>{l*+A{Bjn78c#(IU6FKoODJ_;O1{n4hG;#+ZPIjs0u= z;$5?<>_0Ds$U|30XAq9DOHnQ0?&V>7f1}+Q8yB~qwzew>OW&uy>Za-Q$!wv7BsuEi z*F**4aTY!Qm%C_-1sPh*vDD!Ey}RUZD9x*dL~}^i`<_3V=a5dqeh?~U@;&8i_-WuV zD)lT)K09<~08dh9V`D=%T~{@@9Y7M;2}a`YjltuHghgl0FDwLawcG5^^?#KDKrj(s zPy{46i53Bz44~_zykQKA@KG#l@v*^d=Jdd@-%E%B)@UWfbZyNp?$)epZ7bEqzzc7V zruR49w}&$AyVKRbkB!0ly}h{e`aYqLwJiBT27`tn5e)}|LtTqTi5I42XHU{?N&v2B z7F@!B7oe&PrBj&&49`LX(N>Q?QNCjM10y|fAjlRx8xE(9z)TFvy3M=0Rr6e1?R~Sr z**@E8x`f@SY@XxGO9t-i$M43!(%v3$hZ&2{_0gp(1x6u|;54w778&b#3<( z&Eer8OCSE-n22&C!CKU^`eYVksnHY33)2XJRZDv^(d)}M|D%_vX*|{Mlhx1h(@JaJ zm(`KV3wfWNo*fvCF053!P3@-YjYlF+Rl7;o7Z!@z^CVGj+mCVvBG9N<0GgkIdT!@r z9>0$eu{y_=sgq={ozLrabzA+uDuC)|#dNHRpX#>f4Vu;3tH9ybyew;06l?F-CIrM3 z7)SKHXC2i8XVoxhz^v~|Z;dY8!inxGx>YS}jSg=Ij3}*2XON;`=8>Y(%d&+9=qP0c z=*$Y-U|;Ie>QY|nG_-t+&WDg%$rQi$T6Dq=2@v+B&4$;9KW5le2$4ot`r2jLv73bw z;AScmy4yg)eUY1)TN%)$rKz-AK9d~x)Qi5EUG%8*SCA!^| zJS552I)C4ZX!zEcTF{c{>1)irk@cNt5`+qA-IGt5?DFXA#gDD5_+9o`q3O6R8XV*0 zAr_{!58S>v*hqJ~x0V7q9ia|4dNiz5w66BBe21Do8*}e8N5j5h7Z^fS#ek$3g|FZm zqHOxW;D7@ZW}ScHhK3$GESvZ4jKYV+=r-O$R5|y90Ef^;fuVRQz-_nB! zv3YPpAKR3jFd#n{j@yjSq`7bDi_K{?)PaH728*5QogKQo3ZZ=8ZCTfQi8FFx2{#DlqFc0li-i zy3ykVX{UMh(EFV;$PMcJPy}Z@1ApMrssN$H>AdQIH&PFg!r?>jX`L~D3do${V=d3j zKDuTndA}3<=TazhG|=O-AN1KLs!ADA9o(!Ft8OCWel0OJhb@lL8OG3`jF@z=!z3O# z-s8ba9MD>vyF_lQ*_0)%vT#u>#OPpkskaNh-~2}NVBz}^s*#1N(-?7=b7V3YSJRw8 zh(NE~hCAsgmlEB(z4#f2d3MefqdiPb*U(i|O#KkS6?M1Xt%(gg0cX+qL&sA;{rmtM zv}Xy2b5-4lmHOR?$g#bB=mv%f8E+y%w+d`|J4qL>3&;G=5AM6B@SAdmS}akvjFo62 zSl%I*^ujFgTqJ#l?0vgnl)>DmL3PsD zd~D&buYN8H>_%M@U;O|d++|0Y(A;*W2(bE>k6af9u!JloAUhFdleQf|m{xY0-XUWi zzN!>~qPa*C6MjbFveyUrQ;4*=P{JQg4o%#QUfhg7j%ZlWTSSu0T!_nN3>aCVaAY@H zJRBkB$&j6X8!kF<)=8vG&v~lRK(b>jiTAqVvgr%VLg7>2iMunfQ#u)%KB-?*eNlSs zgaWO-hId8E)vhh{B_@A8PNMgb8|szB37Ua77LhTN6c&yM+hYMUgcR3aDRc{)yGet& z6?DSRgC{#lt2cfYf{k(}6qSICZ_+jh#kp(w89q34Y8$~gIWSuWA?!GKxNcBgOK=#u zXj9k!Q0u6%Zz#%`Ei{{18mX#s5H!J{<1l9Nfqj20AI9TUqz%<2zmz{j&vZ(=k>?FT zJ9%i`*7f@i`HUxKBvuAKD&1?I-Ih%$)**@}`@Ww8rdlpm2X?+`-QIvB5?u{0pEIoF?%)5 z_;whBRUFW=$UgXW(8J2B8HzhQq|XF0hhLYEmT>q^6N!6WO+s9QcV6Rmby-?x`13~8 zRtVO67Tqi9d)eB$p~c{wRpP_saU+g9i2>*$zAF=P zn>2&et~!NK2mO(_>xy^cUlgGg82JTH`)qwYr~@v|$TB1l``+I=qzrIF0Y}#vtS=?&sO1+7E+I)3RS-@ARen9+vZY2a)e{5>Z$)l zp_CP%-w_>^Bu};r-=OfW<)_*aW9cDN2+72IGMr>}dnio6rzFA#YaQ7T1Eyr`RYvwGC|SBzn5y=NoNB zeA)e277h1xuNY1hN*&)`LF7%bk~|9Wgy=}>v#9cF+*IJA;SrHo0;~JrN5at3FT0`8 zZ1)trmXm)tCn;s=ugVP~cW*=AJh{Za6E*kVQN(1B3?muG+CewN4rNKYWMIhUja!fV zD7guUPQ*HNnFXN|@wFJ$#hu*?Fo`>6X4hn^0rpT7z-8+7a;WD^y6TMq@Dq3#%K$ zy(#dbOT7@&2E4N{rnq985lbf=8P1Rio3EP-_8@w0a=SgtLFyC%a>XSiPc|W7y`G(? z@5CViTNvs`)m0A;hr8$=<`)IBnRvULIN~lsvlJ2G{vc#0iDeu^BoFtb%o}7&;0mO% z;ij&~lB9$}h4eph#SFCHXN$38tx>+j?^kYKeF=y6?+=^^7phm)PUMdn{Ys9@*tQhv zAdV7I9QcXaYH9gY-HdE+toM2Zg|D-J-6%g~t+iyMYJaS}Qr!9&D*@mE< zh$b?RIN{>5J6Fug`QdZ#r}x?L(;rpTQ!Zlfsu>jHmF&(Oh8OMi{Iv%t@|0?BHeN8opkRGI*mleI7{07yqM0$9g8PeY$wj z`>^J;wV%fqGy+A8!MG%bC>zy>xyaVW%OP{0S4Y&Kd8CY5^AUolNC{jXY0N?AC-OWJ z|He$&WbpS1J(ipAa{l}1HO(-n1}kCpZTH+`{LjfXTe9g@M0;y|v{l9d3ii5bW-#+; zcnr{{sLufQuapP)2WAK`Y54pb9Y^D-z3y`A%Uaz|M&C4f7>%w!LQ6^PilnZ1QHZdl zFe089U*@cotc=Xn#!#;%1-zS@UDv?h9Gyw|%$Pqam#{_G0p&|KchqL~ec#1e z04#y?^VtCXoFqfYjyo;wD7>L?Ql148-5}RuO;4UA{$o-S#2}f0(_Ro+^w|)R6pBJ> z)!+#d$`E>4CF;b=QclZ0i({Nj(HPBj z5T&ZZQ^1k_iBgf1LBPqB=q1|!25V`=0|J$X6dQ>D28NYjn3z!iKhVA4P%m{5b0Nxb zfdI!>(V?%kmO_re=YerT#+YLJ*nGI&#n6e_kQsu-Nk^nbhg0!#L(wmMf&<8y<;N6n zNa-(Aa_5eIg(SP(i*#Jg-nKgyt9LvCbru(7L+ z2r^_ylE+>$LrpLVJaORy^_twadld>Q8z}v`dBGlhu}X-jTROrV$H~_u`jKB}=?MjM zw}W;&BlTKICR>dR#1-zo|PG6p@~rt_Fnw?HY_-N+z50`r9vP#pj$Twjc7h~ z@`DdUn(PuuPtM(jW}^cb)(tw(MKZ5!pTWS0kouWi80QJ~YVZa}0^faqVZ!Mb{OPJ8 zpnlsC6?KT>^0RR7>{IiZOb5X0jpgSoUpW-O#Q?WL5G)8qk&kIDOX6Sqb3+^cn61j$ zn6N7oh}VfsRoiM2bVTdr9eg!9V=Du5M)aAXt zYHd9YxiJ(t{F=r#LNvWf*AMeb0u03j$C?T#zGSh*E8}%qA^r_h9HOMrg6E{66f%^X zU$KYPTX{7$$ERt|^>_n>H2d3@X{un)f~YQy-L??JbS*h$>((yPasf!QJpFSIB55|K zflVc;y4U@@m_b)0qEGz7iEfhe2azm&B%T3+8a{v}g3oxsyJ?YBv9p(&JL324H0WqL z{|hJBrrlr>7hMUa<2+ZCTTe@9rKb1g-n|7LF2W*<^4(d)NPj>h%H3kE763O<3F3g- zt19MnQEBmWVH&9z_@k=_J{HqPH`BSaG|d2;ujwg`T$5x{@5m zY3QX2WV~Ep<3sYt#B^X2>}^xxOlWG+Nuq41ffwgrnz1BQ0i(3~nz~alGON$;BioKq zww=Ia>hk%2@(O6B{`R5R^0vzp>LgcN0t8>NLOZ9LjufBvakZ8~Ng z8^3&D;T@G)b)Kq_JF)s;+&qCDJe@c3>TSL%FH^X~v>4}I{!|4sn&XClJ4()YYkgWr z*mO0^luwo|tDAv6y%~TdB8}}6RJp(L8jgsBzTjiN%UN0?352lT?eQ=U{Z(|_0Mj*O z^l*~a!fQ^>A`U1j$6cl%`-)MR(f|Te1NRUTlX#q`AGEepvw&Q0x5wP)o+LoH= zZuax;E|Rv@6HG1dg?TI&D`f`IMexD`F7f%fQ*91wq!RA=v~#<_`gVes>wc?&6iMRf z4yOb2ZfUge@nfs(5LYWO>q0*oT@l-{MsLTXDe&i?M!32J>LkxLfo;*Cn*FBVsm>36 z1`h?VM=dY;OhcHK#nEyGhacNFVbBxciKJD1hN@Zh9CW!B=VA6HP>K^F0*FOcqp}`z z`x3-vj%^G|w5_rS$JXHNhRyXYghp}LLc6~a3?Ig!l)LwR@=6oyIlzUd_S3Z#-^_nL z6l(&EYD`6$x|N2T@sH6`|GJpTcI=sj!-2tUDB$)LdfbGA#hGH#jFVj;LPCW+Z$jPD zK0EN{Q10=3s1*mJvPNr`vXbEb2a{2dfCbf|DTKMeFkU(dw7COJz#LEIw09{EZ}9AXF06kW0pt?GNFw+nNeBIKu}BxyebY8U5I1MBWk<% zQRlpA!(oS}qWEeHQCl0!=}K|bsH<*#34+fiWD`LTCF{OiaOx-JJfB2PobVLwtfK`d zfjn*cax0W`syut4yys)R#%{wG=umb2;$d(*Y;W`1*1?8he9$o~u}f&)*4n;#@+Vyu zD7%HY*7cWgvyJx=pKx&c8s#+_jc1)3BAe2Ca98j{L8t+Z{o6bk-tFL{(RE^|hO2R- zKiF49-KCL)F9@9ch!{;2hVSkwU%(fJv$=>;}iQ&Xh~OdtG8K* zzAnk~Y^PosRY(Z%rGepwkR}GyK_FI8wf|yBy5(r=dVlS$#AQtCIGMf9K&1(25<1PK z(p&F8R00|>w0T<-u2ouOZIjFd6WJoQKQ93+8JpB+;B?qH2tW)4)oANAtVJ0AymFG&y{VV zNBy~<34mCFQQ>9sy8imbYgcRC;oCWON> z0MsaCFOFvm4;E-u2u~@J+F1rDPQvz9qL))STRxH(11uQnk@JYG`d|;n1-+A}Be|?) z@(M&wtSVuxss7ye5eIIf7#KA1*zx`?u!0i6jpE5@n#!j?18(3B;r3x<)P{W@s2p&* zov&P4Ev{$^ygjqV5((sJG6i{APH<8T<^!Y!XB|*4iVgRZkYny?K*a{6dS0Jszv<() zDCApob;Cwjcc_Zoj{h)Y# zzEL=(2zY172pXM4MtYG9E)pQOCIdot5H9I`(2H!4c#qmE$whj)sK-TfYQ<_@`}Fi= zd-st$7#9~e^7^7;L^7go%kzk!>+SWYg`M4SUoh17=bLFPjG6-o)6pzcO~2b&iO0Pt zMi%?^vQ#&EaqsU>b3yLEl$KkOJLs#Yy}RNZ_hkJBy_Y&4Frx!H(^@CCm8ucRboItp z@5ig%F~*+fkN4ZH+kTyMtE=r!&yS7=)-}Q}?^(QgbCSPx|E&3cr5$<0M*pTpeS(dw zxCnvGbv~M^_PLql5EDupg)d*;VlaC$G<}>!q8+H$dX@B^)myx7u0G8N>P4;BaaIKL zl|*V$xgV$1;N8)%FRWq{=EREWdL1q|xZn{Gc9Yfh`l1-SHRPukyC(`=ZYWS;e6GJx z#hc>P_Plz91|P$hr)uyk0DIN42>2C_r+hC658v-kAE!H;G_TG0d$OA{Cz;n&4T>fv ze*iTnhyCH0i_?SeU|?ef7(mTwjP5p%Ds-W;cLsO67{F$i2lm~f7L52m{ev5sdWT?| zJayrRfe<~FD-h?t?TZBz-pup>V_@#UEab`I_s#f0skqhW+hWXw?EsAY1WQGGg+!s! z#MIOtaK@;gN$ya`k1QG2Xj@;(7ujFp{WNH|$E#C;;?u-kn3nC?B2wiSXP(ep-}}{; zJsV8yi&OAg_sb0-cXxNC;y5CKVc-q*eM#GXcQk=aY~(?vKaonIuC6XXh2~x1Y+C7k zWo>t4dwaX=4mGaGDMiZkyk3*K-oA1n0Z?hG6R$~Crw5Lic7*(4Z59}KG;=Qa2hwTQ zPA<)KM(6XD`U2&*$9*KW4<9bh@+1Qbe8?XLBhb=w8igep0k^1r&)-KTvdCt!KQh+) z2x zQ0ZA!yuixUySXfDeFzs<3W+e4ONcO8m3Th+X~?GeX-tS-pg$Qh8v_5(_=?Ymj#~GD zS`xLkp~*xVj(7#4my#xAFB818tlaG- z&9gl-7ll)w&7faCk+T=(qsIVhHZ29@e%Dp0Gqg$uZsuKx(+K*$xv4L>_N1CP$(1hhEEvUOWQ4?&3_=;L=)2>ikuNlQ7Z-h{B!UTxCV|7J!tm-Z zsM$z;tE=D=ywS&6NJ_lyag?bD+~HJgf;#U|;4wLM%u%Ahox!QRtHYq4GZ-0Cf_er| z9OW%7CTn9!>%DTot1X4yF-18*4HqH&KHz2xmUI3xZV>A10Xs1Mk_LaY^)ODaT=+v) zZ3X`UB{t&iO4odDdmJsXT)r??q`pZq?HSpo?*i?Bka zSxd=ow>x3uV=)^N3>Xkc0(n`bZ>ExL zstlxdm2$+)aXVEZ?3wv_lyFt@tTmz#0DlaN#8tUa6vUj6LZx$c&y!oH_ZKb+Em=!S z#5HhH7U~hFP~wzS!^-nl)Ep-+sE~;`9#3px@o;)y5D&6HiCynK+aTZU^@MzxwTH@# zfas@wDH$+w-0iNz>UgK7j=!scDml!g-^y(=WtB>7ZkHkx9$JJ7x{J87$aMA#C!TIN z$?xck^xbQ?=IGIHhI1ZWwG$3QUnWGcD{%CAI^w&MT{u8dz?1(>`(|x~pm}s7WIQ4Bi^}INb$yOO`5h*%e z{ML$5o`V(+CQC@4m?w{hwh-ZNm3`j9!XN2{DRWowgoE?D2Qn1`#U-a^H13;yvlO(L zvE()qNejEll*3#^%PRKXckIJ#H8v}qu*t!3JnxzbxXcun-4RW|>&wNFN6#0~IP1H2 z!)Ewtdd6Uf>>kCr1`i#?w>N9-*gpt8@B}~bW%bUZLe7ayi?;BobgQ>{e8UtkrVRI% zP{TAo5$yedSWAc(Rf5EP37aQE#rWRZOX^$jSS1m*7}YG#Z`{6GfG45MDq+D_mJ|o* zFj%MaOx-AqnnaS2#>BFDr4TdBcv1A5Ybg(WuvP;#9-T(!(FEct_8PJN67dyeF*?k5 z_)D_2yWRE8f{_^+yx5mg1+D8n++kwGs}I>_>4@fzM9bF~rlG6(6T*{k6a_{-CUbI+PK^pJwrHcS_{-KAz49 zXM8Mw3PhQcOhYJBzFhqB4&wQ30%X;KJ2-w>O(z_RiuuGUSohqp)0?RcBYVJ277<=> zs!G}b^6)KCdD3olu5D%WJ~YvRJrp^zqt4M^C3JYxY;-JZP_z1Mq(7Wfv*iDJlIkK8A@m$pj8Bz8l=-4CI);b!VfQ{ z(imm)S+OV6gB=MO2B0&Nzpah3Z@lUd4aB=y^CmjuyEEpBdR(DLj{x;yojADEFhhhm z17hN9cQo0$c3J4mEY5Ui|E4uu6lhK2>khbfxR*Ruq2rVT|2P#&6Gw+%%J@#+W?zehBR7*p@EVj=Z_J zXpx{Xd&vA^VD_lLE>C>U?A*b;fr*661`G!%`u@avFGp0DtItecGQv~z0uOZo>rb|f=*DzZ$(I_wF)NakseSc7!1Sy>pte8piGTR0;=h<- zXgjz40C{UpWhMGAZ`K->ftyRgYi>2usYSSm$wc^)|5D+6eyxGR&n@zr5Y=O5R4hb_ zzhFq9uTbwsXoR=zjH-VX<0r8fgnh-(<=)hWZ*Z+uEuYVsE7%>E{$?!8;{t<^W-~{H z{r8~%;=UDaf$bG?S$7E_F!8?~7O_Bfdon!)>~HNVnIPbWR%qtFe{ko5U>Rh+y^_w9 z`GS9IU!?5qEn6GZB>JQG_<%!bCZ@S8DQe_D+Xb6}EcyT5>E}^^B`{;hh-1eXhg(S1 z@QtD3D7&!q(^K7Rd`^*95OnLzr%h%HNexU0jTTb+%Rrb%38ACxk#^mumpHaqzHlkC zyPG7F-EXZ{fy2Jc(m!i5Nj~E|1Rs5CqkAg;n+q?G77VizE@8&E$hA0`J;~6Z2!Tft z_7AaOB`07J@;$bY%g?NddJ*6Pxj{#-{vk8uxj|Ibb(&1DvQ)Ie0Obk%_i*HYz|>}F zY==2Z2_{_i${=5D2Jk{(YcCr4-=;xK3YxeW*s;TV+q9K~c@A7XIJG?ZKUPnX0kjdJ z=76b)X9zSU118sDL z{$zJWAfNcpu?>}!zwog%GPK)%h$DOgYM7{8WHgRr0S|S>V^Sw11PviJpXYTEq?JYO z7|?UM-x~L1W5>5TH1q!+I8N4n(emg{j|&_0oQWU z-Ul~jON2n`g6+SfFY-qKn@>JmbTqiw??pyp3Hh|-0TYcdpa7O4y-aMK!Y@s!;s}iq z8coZT25cF!-j)kYnc+ZtBbfL^CKQah)l&r3jOWdpxCytP>A856^hTWgKhwyv-VU920$J@yHDF^#w?S*Y^ zF@95ON>x38u4(x`x+y96e(v*!mef!8YdHxiPBVI14WTV2U!I2bik{YiY{iphOMt%r z3&u3xgN~c~{M)ww8(-4S@j$5+#tZ5ZFmK&*`(S1(eVN!DthpIYZjpa*?I@ zpa3B4JZnXBQLH+iloEAMGbvVC-ju3Fuk794&^^1h)=|xL;)2WAbtSCS4Nl8-X2rwGC}s|}kj$#GUsztYr%j&2S(uqoOtM$!6PFITo8tMl1GI`t zI6Jc<67q%v`|K`rpsYew44rtdbS^>U8^YNANII`w1QogsP7nUEXKa$kJ-m_Ai6$pCknix-BZYt=Xv4 z97fI2RJQhy!%X`~Fq(u_WyX43yER~dO93Bwkbd>q5|^yZ{|lhU<}xYVJ)2ZoJ8=Zg z)*NEL*Hsw|N9ZgrTa5uvF!gCj)2a(%90Of-kjYI}0Hv|a8O zWU8z`0nxJCj7@n;G7##kOt!lzG6DN;19vxEqCs9c&)BFrojk<8pkexWIPP=R2i4}d zKkRmQ?ePhkI!bq=!wDWkMDHa$4{AE*j>g)O1WB(Yutrk$(Z0ZxYaEci#00ukM zEP$*??f3Fo#9u)tTOO}W`NfJjLtidr334re)eG@4^9}mhOrbdS zp&bjx{ogD_Csp2U(}9n(yTm)obiO+pc8Uwt-wBCk<>RoSkdv?>*#-H0B22WU1|m$E zPJiY5z0P%|N)Ll3B|`{fabq*dG!{CWmuY&k`h*DW3RFol-W3qzZ}6WhmXwG36Hy+$ z6$&-Kmxp3D-9MpVZskYTCLhiNt|UZTwd(cK-2|y@1-%R*jWzYz*!Nw&VGDn!(SyUN zwOZ6OPIwMNYrq@sAAF|UI~N-^V2jNc6m$GKo!Artm_v!qwi8UHYamORp;fTIw1^0p z<8M2F$kWm0wp>^LVdwP5(ve@*dB=#jx~VPRT`jXayN0aD%%r7iVZo4`&RRH;`Q=$o zhG|)R`9<9t=v6%I`!q-%M7mA2Oy3$%Nnj_MrQBBfIKQXsa~Yj?b|Dlpf0iDyISNp_ zl;c8ibT^=*={9QjIw?kwlo**=&N;82)}RKIiY^Ov=arm zJIFPho1-oOG9VBMw5lgTx^(Qtbw8Zd2Ng zmW^Tl$6B}i;=b_E6b7BeK5zpmUF)ONy`QPOZbX`W79lg^bY}t!{ ztgo6`TFvbrA$jOPNw6~t5=s!)6+8)~E^QSm+_NW5S+x-Zv?DTc^cz>}TO)CNsVe;{ zmurj`zX_Dfgj{kp8r^wAUhmDYWB%b8xEtA&#Q_|jS%=nZGV-nN;kB~|Duu4Yla?56 zX#0d%s>8qSfE#=QyboMG8;{2~OUokU1T%yt;z=X8x)q&yb7ZWU60M6@$q}r+@=NZo z1N1+#DQ0~+4KQYjOoKGZhvtI#e3J&a44StZlTu-qtMlfq!=l9cy2k*ck|K!jv~2lU zt(qS#0Ft)ObiQiOmt34iIDxGRh@(fojrJWuI?jOD9-{GE_DBIN zb2NW8Y!_xa!y9%3G(dCCvkMN)iek?ze7pcAAM2Lh8Mh6Iem5YRbCzI(lmlroL(m}) zFZia?_qaLb(_Lb~7BqTG*pHjCF^|}oP!vh;9Y-4b3E4Usy%j2vwjTb5UQh|LT7CK- zF~BT(eVo_`UxB@8*=K7Gk*3q!+dWG|aN8F(+l?}|05pWqvfgO)U=DqxlF&kuMFD0wGXH!`0K=i;L0P#CCF)GDR%R>cyQjzo?=nQQ31drNu$pU14_Cy4jd*Hl z8wT@kz()_xgEd~(xP_d6GnPyKv`}=HLU*&x_tuP96vUte$kaAS%APl0$30@@{%u|) z@&09AeD4ct-NQ0AYIg8efeh3QD{WKQ5W9 znQ`CHj_;P1L^7mY=&`npl#f*ev~@^}f_anW(Mj)S^!uA*5syDJnuCS`RL2|L6@WXY z%T>z<+2S)yLe45KQe64|RcC@kFh&LQI!`7xf$#)HBYIA0GL(!EfjRKXse&*Qwt&}H zh)^&5oup)Zfu+F`oSLZAdbXLEdWR*fM2$3@L5jC=rseADxgr?N_oBXq;JcD+tR({7 zY)EZ%8bt5PsdzDAQY8XkFPTLLiE#6%#uZb2r3`Q^54fASccXri)B+@<#&s<`))`;3 z>Zx_o_ z9=(&@kuI6EKv>v6G=1@7=_idb?mrFlW@HqPgLlUJAe|ROWj(ZC+8?2kR!dvx9hj$#izw z_VY7UI)!YhQ|yYbq}AE%QeYi(x`65f}>Cc2wCny42|Uc>fWzOmlEA zc6@FQ#>)=rM_wU?!n#(<#j``@kp>$6Kx;i`R&_o?Ve6XW0t5y>oO$DozZ^{6NLk6F zCfA<`HURS%vJJwZ2LH2NQ0^D9eeb9CI|%z#ZS@X_@0twWjs2~ROi>xwZWWoEocJ3m z2O@NfKp-%u*9c_!9jyaDFC+nhdB&dk!51Ne~dEz$+y-R#N#de1ifb%4Fsu zA|Fou^N=NTBBpLRlViG}xw~&+ zl$-)K!72Qoqy^B&k)nz>dw??k=0%z6?=t_Zo4nw^!SY2{t?u|a5S25|=>2;q_#ZVa z`k#jNO+PtI8N0O+n}ZKbXgH=5$Rw_Sb%rFU5eBBF#T)Z!j9~$N2EDrjVa^}N))%)@c7{o&Tq|ee17oBO%4dkn0L1;!>0uZ&cC(^j3i&fhTfoXjYE~yvE@>5EcYh z=-^)zv+TfPDR`@5myHdbEb7r1&+C2%qUKT_Zk6yqQL}+QFz=ceCuAx9wt6kVY_p){ z=KY=80p7xOjL_#m-FDSx7&r?Dpor)TDg`GERK=$`{hmF{l;HU4OZBv_YOYQ50AuFG zpR$@#F{>22;hWTdR5isX-UFW;W2r*5_cXZyug+$+U08B&{}TCkfc2(B&eMFUo13?9 z58M7o6r5hbB1n$O0q|ssKT-4jLS=(rftzJh>RJe`HvfgHW{y>=xOcf+Tf@P;Uh+Y? zo26HC>e_}Vjezz3($bRckbLPpP~gXkye822qN(of=vZ%3(%+cmLqI^#=6PebOLAE$ zx&wIF8c5amivU^|l-1A6Q>76LKh`&;N*k!sq}+dmsgfR=)1wJgE!S9+p{S$5_ys>h zWJZk|*=uTRx7GZLSgk`>F9vO&YKB((xL2l$M|euV z+@oXrzT7R-+O>KQ*|4)xS2!rD*ixz4c>KHGlo}dsbqa`Whkq%-6`S|T6>-4n(H&qd z$`=wv9)vC4BQ3R_5^3vFb;3jg?I4mT1s^dDINdMtLqkKa#%ODIhOqSMN{=Ev*`x(e zB4z(9FfA%rPxp#&)t%D=rb~w8KXE=GC;&KB6yq=2C@T}WE!+}ZEvxv2y6?otx>Aw& zA3-?mHdbo%2(jV=8tR6twOd)>_>R8-=SXK>^mn_9G#uBR6(fD!W*m#jiCnzfifJ6}}SAKKW^p=`sL{1x-F&%l^p zrmyak-sq%$EB@e6rU~>=yPku1JlSX^k3JkOj>Dn2qp=l8abload4RRa-sR{G1liTO(C)T3Bdpa;|Zi_LCoa~cJwdnPJQn@ z_bKw6=$Pa3+R?H-f3%5!(V$3%G0*YCjr3fSBx?;$wm@%edReeO>Xd&TsawGZ0~QlS zVE5m+HLcPynb5HHlK$9X)fcjOq1a_fG4q<8GY}P#Vf^~2HQ2P3nG|r&A9!hiOw?m2 z`tarqnTjm>0MqR{UY{SzJ|7Np$kY)cO4T z9;RkBWQDH*CtIh@XEnNymgM-r^uD6p#-Tk0Wz1777kWHkK4KV5JF-1foRoB6dl|8( zH`^QM9z|g7=W{$6OuqL-)H5}1KgJh0g?X!W^MtOeDa>w88g7}NFg`U4-7zl2`Cfqu ztDp)B5HCazd#ADxa8eY<_5D9pVFxO8g+Rd4JiSmJFo_J;FvK2`9r_UF;DM}ViOy&j zbM}+}Ke4vF2QetuXiAh@fJB+jKW3{1FkB{WO@=2|F%t%>0X)EU2nC`mb4ZTD;`OyRsd=d}8`q&ydA`F+9p^(8+}G?Fr!1 z+4#Y0<8tWs9UhYa*u%;EF>WG?-i%P19g(=zLcJqVETiF;8zz;Qza233#Tm(cBZ~D5 zAkeb*9~_Q?!0UHFxL^I?f%UpqM_ppzYdc((@J`IVm!AU$S#nOJzP-*;G8DG*z3vJ8_8MsFCYv7sDK$fXGLb2L^pVJ@eHESPFk*1BG?I0WKAaD~+Ao1vhuBSdV zAQa&&D%Ig)X8gK^r#^vwx5iHBC8|`AlqGF{AcoWro~S`2sYsJ+VW|ein*gk~G(R_i z$Ul(h6eXO-!5P?ovxb-YNo}{?{>iZxqSMrsF5IHzebTZ)y~uU!{!;cjb~6?8y}p0g z===ukoeU$y%sMmp@)02$1|hm#?sRg0x~yQJDtt6LE~Q2mVYK{4U+@CiMy3<7PYE8L zGR~<|X;hdTD80T?g8I>R8WkmRgwG9QA2}g*@94M)HupjtD4%R7rwSD7VSN$@R%yr{ zDWxX}=1QE9&(Ls4gAYXQk=2;PF@xNN`621oMV| z%1L4uftat)bOj8Ry?}aY$#a1uD7Iy#?$2WdAB6zU~6;JN$Zq zB|h6Eqh;WljsiVNhKktx)%B$E!6^n%{sra>e}skX{P0Sk1LO)L`~V9J_3K@7Ve=xx zZZ50P1SHuN=OEFeg_V=wweCPR&wN{1G=Jyb(hxq`1BR*2j+pFrd$2V>Ol-3!7gq_o zJ1cGL~a|P3PxJg!k`X&i6OzvTwwX!ES-C#M+V}988mJec&wfF_O6t5I?y+C z9Q$Ii<+*3c9t!=%gXEsusKdHJ%{n2zJ<{t=Fn4^o{A9v$W^7>m!NP!Lx%8WcoQM3&n_z5aCoKE|+MU+jdml1wIM1G8 zu8xiKqa$w&15eSyqx&>&<>>D!RjVQS)hj|%-q|B_w$+#Sr+h*DHb~$>C7qQ0<5f=H z>u_>-&2Nj@)U;z^4fJ2sf-@n9wWPr!`$q%{#Y(Hn2Sm&$*jB-g7HGa>>jrOT$C0Ry zsb&dl!W30CJ|`H`ht(m?1F6z|t*V$Laqqq4uq5pQkJMmuf>iR|ZZ35xo8*dST51H} zXD=f;1w+s%5I?k6To*5wi1Mp1h5qEPPz4Yc`a&dBeEySJ2$u^8Ojx-uy!{JL{)3ai z05S+=V91&fe-au2D?qz*gsp(I!XJt-xgsbKxzd0ni2aSA`2S7!77>CbRXD~d^iral zl7c^hQL@|?Pm2EwSGoxjM|!Tl>vV-GWugTJ6&rgN<}X@9Pyu333F1ONi|ttI{i!h6 zDVl*n5x?=$Z~TxdS$rB&!Ia^ra;pywq^L7cKqBC&j;#5&_W}Xmy)-cHusTsB1jMBO zcME}FBgEVTN@SZsvxS;4tT`TyAT?tt{UfG_UEG;0RfP!HB3UnC;c2~@+`oQK zOdLpV^u7yt~?y- zu74vmvS-hpeczYTFg204EIni`%p^>n5Xrs`A^RRm$WqxUN|wo*CHo%PWz9bJ@H-u`@b{SvLPbE;!(}z# z-|?r~2Lu~a1!3lNM_qL=4EuS1mj)E(u%-{tp~00!OhBvADxCa+4y(HX`?Jc`2G`40dWobzJ)7H zZ}z%ydVuZ!sRwXprE*#<-&g_ygfS3==!$s`MD#5<+-JxEQ|iKnW6&TP6GLwYEDMH+ zQg*ZYZEbh=-FLG>&o7dblPhmIbepDK)?X}Jr5N(ucbArv8y~6kaoXFO3OZ%sEl(KD z`QU2WZu=GXQJ~$g$I{PK{)1Ty+bnR)Nxc z5FBmIZ-(y&Ob$pC3X)g0a?03kx%S>-bnd>8k;CuYf4ig73P+He9$%On+gC22G(kV7 zYWth{YI%)|Vp=&CnK$2`_>1&UIU@aMw~OE4)#9QTLA2i;+3rLv&VrixxZ(z6J`I73 z6+EL?qbzyd`EFkS0D|xIo%!_a%(B6}6meTW=>Ec+k+;CHtp25fh2%6P(zS5K$ zu4qu;Ukd#hX|x@wKwl6^Y3Db$uvi8mws~ey$P@v`|6fhByjI1XdjsaEx8VEPoys3f zQIwRH1_`x_8(@1s$XUVs$zDhaOK3Ui)>pLiVswJ3Y^Kk zve7O9Yi_EpGp)u7cl}STDr(1FZ^1~`P4*R-DjOX75N3G!wP)W$;SS$;fuR?f#p<$X(Um6~=oMH#%xauYx26*|f)WT4tJv0a;iz(ou=>ha2pajs8km*e}L%;R@=E%^B z;SI_ksjXp;hi<20C7-OljBxN_m83q4TLtpRENWcg8zd^cb)wC*uAL1+;*g2?pP{oGDZ(co33@K>A4|ua@D3 zM|j-wwEN42rU7J`#LbZkkFUY4Bi z>Xx~<;*98?OHFzrN>y~{FM>e{Xj#4qQDN31V@&P(b=Ic1IxT|ySXLGTq^N?8ffhwogr=d=Oz8b_>qqy-mzw>lhc0cDs4!=n4?*9at$tb9oSJZbw2EK4yir`LrmoRESL$w|1%K<&(Yx>cs z8tCI=Z--OY7}QN?w$o`qIO(PED8%ekyPE{M^5g@Pl>$CHYA>0))^{MW?4%s_?P%FG zA_V#2R-bH3@KF32b34karXlL#&Ciy7Hk3DRj*qlAQj2$Wk54q@e7>n6mtxxxY*l7I zcS+jrM(qoGdQ}F0s<}BhM`;Pn4j+wCye#Hw=bd7fw(%JvSp6S)W;jIIDBt1)0YCiv z6KaZAqi<%4ONDz!Q;~!tXw&Ct$%F;q8}5}buyZbPpWynCPz)9T+)D3B68DrNL=zs^ zSZpI+d8dCY%(i`RjiyLuxMyPl9(py7Ew(Mq=lu?tm|n+lo!I@KxbD^>FY3`Qf%v8$ z^UD6KcV#O0hk1icL3%K{cQ2 zHvEJAMaZAd!fO?;ob(>cLXm+}_IR7x3S@-6M#Y+`B7 zor0b4r!5UaUti*fjw(-NKGUh}l0|p*%a@Q3Ozo)3itQf~!WDw}3T_$dY>f7flSBVcww+G5oJNKVYTHuy(+BcKCc3#&E#A+Jxi03Y?I z0vvqVb$U=sGvsaF-|EPL55<8!i#aX1-_y}=0JSVgN+b2h`FuJaoZF!{V@v)>k5&eE z(EPjUNA_(Njdjl$RN>*pj`M`ZdL>U=B5rM;DPg0EEm=S3#$`JWhj`zlHu^yIiS)9q z-*P0J1gR00-?v97^j#{SOdvr2cP5{PJ3&ROW)BZN?Kz`XGA2?!zfJjvp- zfejqs@2@mF`s<9}5{wF{e?3FR(H7%X^;(G6=bvXFRP_chWb^}vT9u#q;9iF55x9#5 zd+cs^cb^FBNZ#4m5to(i>5P7`iii+B!It4q4@zu=OqBQsX1UXmt*&xzWolshxzt^^ z4H?zd)qOiVJE<7-MX&sTD=H~b78&N)tA23KSB=FB>w*V?>Y5SS4Z>@?F{k{tw!+~KSs4r9SCvdX z;Jb`+a&kyBGoB>~TDjzga~hi=c%Ppue2z^pS27E+WcuyzrE~mJKDwC3gjJ7wnl_kx z42CT?H@9kRY;0#vC)3^8nMqbwwrXzf?{853v};LMW?v|K;h`l7J}kT#6MTD$SVuM$ws&P%OkU+waub>1*7o}Rz<#2Gqa%Z^p5DNxkj44= z`68F`x8zAr7~?vG6xO1mmSu+tq_&xwz6g- zqn_;?7@BCEKKJspl;6Q@IPAA--nJRtlEk4H>ppKO_M`qJgt%RXA+glZsnbVuBiz@k zia$vDl=o2%=r9PkZ+onm$&g~y6c>ZN=&}AM^!tm$V-JNZI?d72Qn0M7j5eh6%F!&s zLr2g*F48!7K>TS^5~Zf5rt&!U*ldI$(ui*7Xy^5knxce)ZxgL;ZtBbH^Bpflz~Bx^1PM z)m_!mp;ae9Pp@K&t*(Znq|ewe1TfhDS|V@*91%@8#w=2!7ce&e;JLAYWo>7HxFz}0 z^P^_KC-^|hy>A-rnm@*MxZL0}fJK1CL{*vnSbbwoZ=NjKI@!R~QTPO0MUM9$WsS?Z Imk{3n2fLyuP5=M^ literal 0 HcmV?d00001 diff --git a/keyboards/xd60/keymaps/cheese/fn_layout.png b/keyboards/xd60/keymaps/cheese/fn_layout.png new file mode 100644 index 0000000000000000000000000000000000000000..fe5ae99e0fcb43078ec978e8ebc8ef7068c3b5b3 GIT binary patch literal 20690 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 literal 0 HcmV?d00001 From a32436d5a16e1092d71b3185f17fda303d8333c6 Mon Sep 17 00:00:00 2001 From: Nicolas Guelpa Date: Sun, 26 Mar 2017 15:20:44 -0400 Subject: [PATCH 85/91] Create README.md --- keyboards/xd60/keymaps/cheese/README.md | 13 +++++++++++++ 1 file changed, 13 insertions(+) create mode 100644 keyboards/xd60/keymaps/cheese/README.md diff --git a/keyboards/xd60/keymaps/cheese/README.md b/keyboards/xd60/keymaps/cheese/README.md new file mode 100644 index 0000000000..8a5b97c036 --- /dev/null +++ b/keyboards/xd60/keymaps/cheese/README.md @@ -0,0 +1,13 @@ +# cheese's Layout +Customized xd60 keymap + +![Base Layout](base_layout.png "Base Layout") +![Fn Layout](fn_layout.png "Fn Layout") + +## Programming Instructions: +`cd` into keymap directory, `make dfu` + +## Features +- Media keys and movement keys setup like on the pok3r +- Lower right movement keys setup like on the fc660m (fn+direction for home/end/page up and down) +- Caps lock can be triggered by pressing both shift keys at the same time (and deactivated the same way) From b6b85ed41397440417106309bcf2b7ef2b617976 Mon Sep 17 00:00:00 2001 From: mattdibi Date: Tue, 28 Mar 2017 09:56:07 +0200 Subject: [PATCH 86/91] Added italian layout --- keyboards/ergodox/keymaps/italian/L0.PNG | Bin 0 -> 152470 bytes keyboards/ergodox/keymaps/italian/L1.PNG | Bin 0 -> 130416 bytes keyboards/ergodox/keymaps/italian/L2.PNG | Bin 0 -> 126006 bytes keyboards/ergodox/keymaps/italian/keymap.c | 223 ++++++++++++++++++++ keyboards/ergodox/keymaps/italian/readme.md | 15 ++ 5 files changed, 238 insertions(+) create mode 100644 keyboards/ergodox/keymaps/italian/L0.PNG create mode 100644 keyboards/ergodox/keymaps/italian/L1.PNG create mode 100644 keyboards/ergodox/keymaps/italian/L2.PNG create mode 100644 keyboards/ergodox/keymaps/italian/keymap.c create mode 100644 keyboards/ergodox/keymaps/italian/readme.md diff --git a/keyboards/ergodox/keymaps/italian/L0.PNG b/keyboards/ergodox/keymaps/italian/L0.PNG new file mode 100644 index 0000000000000000000000000000000000000000..491a4f3883148a4b6ea730c545a1dd4d69c823e6 GIT binary patch literal 152470 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 Q!CclkeY3OWr`^N<1Dv(YUjP6A literal 0 HcmV?d00001 diff --git a/keyboards/ergodox/keymaps/italian/L1.PNG b/keyboards/ergodox/keymaps/italian/L1.PNG new file mode 100644 index 0000000000000000000000000000000000000000..17c5ffc67bf071b11ecc847048a5693afa0ff650 GIT binary patch literal 130416 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 AK>z>% literal 0 HcmV?d00001 diff --git a/keyboards/ergodox/keymaps/italian/L2.PNG b/keyboards/ergodox/keymaps/italian/L2.PNG new file mode 100644 index 0000000000000000000000000000000000000000..c0aa9e9d38ae64002875ab484ff58defc6fc5c2b GIT binary patch literal 126006 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 literal 0 HcmV?d00001 diff --git a/keyboards/ergodox/keymaps/italian/keymap.c b/keyboards/ergodox/keymaps/italian/keymap.c new file mode 100644 index 0000000000..e4c7a569cb --- /dev/null +++ b/keyboards/ergodox/keymaps/italian/keymap.c @@ -0,0 +1,223 @@ +#include "ergodox.h" +#include "debug.h" +#include "action_layer.h" +#include "version.h" + +#define BASE 0 // default layer +#define SYMB 1 // symbols +#define MDIA 2 // media keys + +enum custom_keycodes { + PLACEHOLDER = SAFE_RANGE, // can always be here + EPRM, + VRSN, + RGB_SLD +}; + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { +/* Keymap 0: Basic layer + * + * ,--------------------------------------------------. ,--------------------------------------------------. + * | \ | 1 | 2 | 3 | 4 | 5 | ESC | | T2 | 6 | 7 | 8 | 9 | 0 | ' | + * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| + * | Tab | Q | W | E | R | T | TT1 | | TT1 | Y | U | I | O | P | è | + * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + * | Caps | A | S | D | F | G |------| |------| H | J | K | L | ò | à | + * |--------+------+------+------+------+------| Alt | | Alt |------+------+------+------+------+--------| + * | LShift | Z | X | C | V | B | | | | N | M | , | . | ù |-/RShift| + * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' + * |event.pressed) { + SEND_STRING (QMK_KEYBOARD "/" QMK_KEYMAP " @ " QMK_VERSION); + } + break; + case 1: + if (record->event.pressed) { // For resetting EEPROM + eeconfig_init(); + } + break; + } + return MACRO_NONE; +}; + +bool process_record_user(uint16_t keycode, keyrecord_t *record) { + switch (keycode) { + // dynamically generate these. + case EPRM: + if (record->event.pressed) { + eeconfig_init(); + } + return false; + break; + case VRSN: + if (record->event.pressed) { + SEND_STRING (QMK_KEYBOARD "/" QMK_KEYMAP " @ " QMK_VERSION); + } + return false; + break; + case RGB_SLD: + if (record->event.pressed) { + #ifdef RGBLIGHT_ENABLE + rgblight_mode(1); + #endif + } + return false; + break; + } + return true; +} + +// Runs just one time when the keyboard initializes. +void matrix_init_user(void) { + +}; + + +// Runs constantly in the background, in a loop. +void matrix_scan_user(void) { + + uint8_t layer = biton32(layer_state); + + ergodox_board_led_off(); + ergodox_right_led_1_off(); + ergodox_right_led_2_off(); + ergodox_right_led_3_off(); + switch (layer) { + // TODO: Make this relevant to the ErgoDox EZ. + case 1: + ergodox_right_led_1_on(); + break; + case 2: + ergodox_right_led_2_on(); + break; + default: + // none + break; + } + +}; diff --git a/keyboards/ergodox/keymaps/italian/readme.md b/keyboards/ergodox/keymaps/italian/readme.md new file mode 100644 index 0000000000..979ce0f5b8 --- /dev/null +++ b/keyboards/ergodox/keymaps/italian/readme.md @@ -0,0 +1,15 @@ +# ErgoDox EZ Default Configuration + +## Changelog + +* Dec 2016: + * Added LED keys + * Refreshed layout graphic, comes from http://configure.ergodox-ez.com now. +* Sep 22, 2016: + * Created a new key in layer 1 (bottom-corner key) that resets the EEPROM. +* Feb 2, 2016 (V1.1): + * Made the right-hand quote key double as Cmd/Win on hold. So you get ' when you tap it, " when you tap it with Shift, and Cmd or Win when you hold it. You can then use it as a modifier, or just press and hold it for a moment (and then let go) to send a single Cmd or Win keystroke (handy for opening the Start menu on Windows). + +This is what we ship with out of the factory. :) The image says it all: + +![Default](default_firmware_v1.2-2.png) From 512eb5e1d5edd39e3e46f8201b57d8fd17084408 Mon Sep 17 00:00:00 2001 From: mattdibi Date: Tue, 28 Mar 2017 10:10:24 +0200 Subject: [PATCH 87/91] Updated readme --- keyboards/ergodox/keymaps/italian/readme.md | 79 ++++++++++++++++++--- 1 file changed, 68 insertions(+), 11 deletions(-) diff --git a/keyboards/ergodox/keymaps/italian/readme.md b/keyboards/ergodox/keymaps/italian/readme.md index 979ce0f5b8..f9d012135a 100644 --- a/keyboards/ergodox/keymaps/italian/readme.md +++ b/keyboards/ergodox/keymaps/italian/readme.md @@ -1,15 +1,72 @@ -# ErgoDox EZ Default Configuration +# ErgoDox Italian layout -## Changelog +## Layer 0 +```sh + + ,--------------------------------------------------. ,--------------------------------------------------. + | \ | 1 | 2 | 3 | 4 | 5 | ESC | | T2 | 6 | 7 | 8 | 9 | 0 | ' | + |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| + | Tab | Q | W | E | R | T | TT1 | | TT1 | Y | U | I | O | P | è | + |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + | Caps | A | S | D | F | G |------| |------| H | J | K | L | ò | à | + |--------+------+------+------+------+------| Alt | | Alt |------+------+------+------+------+--------| + | LShift | Z | X | C | V | B | | | | N | M | , | . | ù |-/RShift| + `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' + | Date: Tue, 28 Mar 2017 10:13:29 +0200 Subject: [PATCH 88/91] Fixed italian kymap readme --- keyboards/ergodox/keymaps/italian/readme.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/keyboards/ergodox/keymaps/italian/readme.md b/keyboards/ergodox/keymaps/italian/readme.md index f9d012135a..75dd3c29d7 100644 --- a/keyboards/ergodox/keymaps/italian/readme.md +++ b/keyboards/ergodox/keymaps/italian/readme.md @@ -1,7 +1,7 @@ # ErgoDox Italian layout ## Layer 0 -```sh +``` ,--------------------------------------------------. ,--------------------------------------------------. | \ | 1 | 2 | 3 | 4 | 5 | ESC | | T2 | 6 | 7 | 8 | 9 | 0 | ' | @@ -24,7 +24,7 @@ ``` ## Layer 1 -```sh +``` ,--------------------------------------------------. ,--------------------------------------------------. |Version | F1 | F2 | F3 | F4 | F5 | | | | F6 | F7 | F8 | F9 | F10 | F11 | @@ -47,7 +47,7 @@ ``` ## Layer 1 -```sh +``` ,--------------------------------------------------. ,--------------------------------------------------. | | | | | | | | | | | | | | | | From 221b27c508b3870de725e720222a6281770b5f98 Mon Sep 17 00:00:00 2001 From: mattdibi Date: Tue, 28 Mar 2017 10:15:18 +0200 Subject: [PATCH 89/91] Fixed layout title in ergodox ez italian keymap --- keyboards/ergodox/keymaps/italian/readme.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/keyboards/ergodox/keymaps/italian/readme.md b/keyboards/ergodox/keymaps/italian/readme.md index 75dd3c29d7..215c24a5af 100644 --- a/keyboards/ergodox/keymaps/italian/readme.md +++ b/keyboards/ergodox/keymaps/italian/readme.md @@ -46,7 +46,7 @@ `--------------------' `--------------------' ``` -## Layer 1 +## Layer 2 ``` ,--------------------------------------------------. ,--------------------------------------------------. From 2104900030c4a0d0a5d71c9900804dec229a375d Mon Sep 17 00:00:00 2001 From: mattdibi Date: Tue, 28 Mar 2017 10:19:25 +0200 Subject: [PATCH 90/91] Removed images from ergodox ez italian layout --- keyboards/ergodox/keymaps/italian/L0.PNG | Bin 152470 -> 0 bytes keyboards/ergodox/keymaps/italian/L1.PNG | Bin 130416 -> 0 bytes keyboards/ergodox/keymaps/italian/L2.PNG | Bin 126006 -> 0 bytes 3 files changed, 0 insertions(+), 0 deletions(-) delete mode 100644 keyboards/ergodox/keymaps/italian/L0.PNG delete mode 100644 keyboards/ergodox/keymaps/italian/L1.PNG delete mode 100644 keyboards/ergodox/keymaps/italian/L2.PNG diff --git a/keyboards/ergodox/keymaps/italian/L0.PNG b/keyboards/ergodox/keymaps/italian/L0.PNG deleted file mode 100644 index 491a4f3883148a4b6ea730c545a1dd4d69c823e6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 152470 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 Q!CclkeY3OWr`^N<1Dv(YUjP6A diff --git a/keyboards/ergodox/keymaps/italian/L1.PNG b/keyboards/ergodox/keymaps/italian/L1.PNG deleted file mode 100644 index 17c5ffc67bf071b11ecc847048a5693afa0ff650..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 130416 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 AK>z>% diff --git a/keyboards/ergodox/keymaps/italian/L2.PNG b/keyboards/ergodox/keymaps/italian/L2.PNG deleted file mode 100644 index c0aa9e9d38ae64002875ab484ff58defc6fc5c2b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 126006 zcmd43cT`jB*Y6v915r_suF?bqHXTA2>0MBSP?X*yy%WR&h=6n{0g*1fOIJjC54}Y? zp@kYs2suyOd;i||z4wfJ$2fnTjN#bCP0X{_de)rZ`JJD+LbNm#$uHAhhCm?X%1VzO zLm=nUtWlO_Zg5_vTE zg&ldy`q^<=+j za6#sA&3YWn{3w*SJ@9a6A*jB$BGY2`m*>f`*W+i;%vI~wKMYXMpPV^Au6c`1*DCcW$xy^SpPO{;AcJSC-pFgeNUIa^sm#dC>=3g;GSjT{uZc{TIjjmF zu7&ohW%n?VGtg=^vSZGC57nsffoz`j6B~Y`iT_YJAXJuQMJc6{?S{H8WuSdv+jl2lCsE#Sh~7USNCagFw$;KEdV6n(?!<={QQ# zXYQmhh`P3^*(@$-d}v4(r5AH?#c-!K*VVR$IYaZMmb!e3J_U2NCk3Al*g0s)HqJJ4EfkkcB9V5jT zs;yFE53f+QrNA5b_6&5}R^m9wRaYyvMZ`g+}CAvaASN!nb=iBpluCUyWl9Hhx zXxV%5^IbyxH3z|zm}t4)_tyl)wpxRjgtuyZ=U*OJPV5YO$AZhn&CT zUy?;}Ey(pvgmB@i+!Mu1A2%Pma z{h$j;e5L&GH0hkBAwQRwJX6%pH>ikuqj^^FR9ZV@X2_*=viGC?p3qB7VFH&@HwD|% z_lu@my`@+E$p5~6A8;9c98<1uDC+Nj5pXzi71;Icn2VUW(cIL-Ag;!*9&KwF-QRy* z3Q9hm1g}@mBnRJ>l9oR0=K9@*=ozl@LA$SC65((EK4fY>nI883S)Zq^p-@B5uGd9P ztO?Rt%glpFh<4xz@C1=1SfJ+P=c@=ShL6jb&bDrmY3oH~H#!!s>Qs6nU==>L8siu| z&Cq!8)=Tz;$vX;!l<#NC%c2Fk`2@~B(zGh=3pc|~U^=eRjbGQC>lhd8N3kRbgq}mv zylVcQC?%7u43Fg@9O0ad&X}WG$V-`}O*H7GUx1LOJSQkN_dy`Ausxmk4zf1c!g$fO z`KH~`8)`@O)E*?XjYu#FNqES6yHGju9r=nX9=C2(l>2gD2psLl2ficc$%nri>pr`m zia1H2m(Z;)ToiIJ$X0FbG0HHWs;SHfEK_h8DeH}jiMctv8zPe<y#%9dZh65%Id0RthZcg2_cQuBYO?!ubJG&oN1u8>nAn&NpJ73qoX) zowNM3Gwg9f&#OACUPk;Su=vd^QVhkrEPa9^g`0hzZ1tP!?~g5QZ`78l-RMG}dwo8E z5Q1$G@JUXdYwawoFs}DbsOJr9Ot~P*o^N-8&h?51N!McCTL#c=TO~=}u2Z zR#w8E?{T&VtkJQ+>r%VKl07DItUJy-n(g~yZz}t*U%#9&nLp2XE7*|HU?{6!GW*rI zZm{gF4qaI`%2F0lKS*{mpu1iY<3Z> zpCw6)*>5^wFWe@8$@S!OfQMy~(@NHl6`h$C(+|6sZrWz_M$R&q+U&%A9+?k(dqqt$ zTsW{aW35U4N~Q)9%5Qpb5oW+Pc~J_o^)`dzn$={K)Y0j5N#1wl43?^O4im!;rM~hh zyJA&U=H;EmnHEY%kFviiGchcrGaDWgQ}k>oO7<;#<9Luzm57vBpO4k7ewMx7degpm zZv8oax0DeJ3yb#Hc$4e>5A!HAQXZ^I6V)p1$81%9TaT4mVBibY&O6_nKD;{%iRiQO zq~bMda^VYpM^4v4;k_5dH)2ffUQdIB8jM&RoBlkn;BcY8!B3oK6cIoQB$XK-U~|Pg z4Qh%lmmS?Wqon%tYzM4b?27s$`-4zYo9StCTK3UrfD$wRd>^vQX zbD|WujRY`hij1)!HkW2@R;;Bjut`b!;P`ibo`FQgyWhu*mZa-@$fkxu-2^%DuItc* zqg?@KS@+80gBm*{YSs~}tioGg5l>SyFJ_EU0<<3>vJ)T=?{%aqp&stzm$=Nuf_n=o`;bKNf z|81LmK}%Y36N>ryPgtny^7HT+4Xo9Y$5!ceW_u3EodnTdc|XgQtsaItY)!w%`@3Uf zY{vRiwHKOIQe%&hQsR3wmp!}-FtwjrI=z@&R<56vr1MY(*F0PM_UqBy2y>oKpWWl? zp_#glbt$*nqEpT63P(VC$(6HX);*?Qgu6Yf)0n&MXmFhuHER9A7_o3`N8fB|w`FKL z1L~b=7KGcL`6BO(%}~yw|ADzl2IX%1xOT;2wng@XHak}g^LJ3u43B=J)~ zK6(S?Ex&sD(Y6E1d5~cXb(Q`vA;b;)8HkNv_TRg_>e5B#NgqU)KV)6~E z2jWgc0>)py@7c19IMw`Wa8QuOhu~(Z!fYa7?4w@ex^iFA8&}HuGBl(`i!P{Qd$sZ4 zH;~Px)>}8k5WgWdQ}0?#E4+tP#)@sqJ~SNJ!X7L5h=K+%bhK? zO|azJ`bId8|#qEnG0-??zHXYecIj@WcgX#g5X5IMvl*%-z%opZ$&4qQ-GY zX)hg60c1E#ko}uNrhANfI8!yAW((jLrZkKmTyrZKbqWm`{sjU+qmZ?AqFozsrP{ zYBskX&kFBu+Oqx3kh0jkGoAHc{S;tgRUS+rQyE9U2m6gh$|zesd!1~U=3(^BE7aUE zlX%Q3cs@XB`dt?a_NaHOqc@Mu)w71>98NJy4-f?G0$z+SKQolNxPSZ zujnZrkO~21+C8bNs@40{ynWAn>$WM!>U}i((Be^2kdG1%S^wk|ni*6h+(fexZ+jt0 z^XYtb1N^P(ktk9{&}OjS=V_ldk8#>w?i0IVB`2p6LvPGxfCiMs?~9z#19zpP=JU!- zcf^Xbz+G0MMt7(D`j6F1OqqOr&#X)D89+0Ww!NDaZOn8V{R!P$K%jRqLVk0Pztl7I z9sJO?>3yb_jm`Cq=Iir&tO&hV++ma9$G!qJ@&ymoh>)Izmvq~)u%sNF43$(gyn^MxSBw@1#VgYxe;D-bUNc*|}t z9;iW#6!rc(8ZIrr(Y!@DAX-pDc=N%X#uB?%asLz~SWhT!_fQo6mK46bn|?qid%o|!pjS;lF^Id99bt5~~WTPK~lGY-eB*MX7=WosVn3~FKH&PTI z7&v9=@IHv?D4mSKKle}r!SW2n&YzE=r0Zg45PzbN3bNzZ`sS4}HN5Lo8(05eaB}gz zkRQ0!stYhbUHCr2)SAE#KJd?4ZhSzj(StkXg?j4fMLp`Bu)FJs85=wr+;N>V%!+D~ z!XhGi z`F%z0jf8X94BoF`$@AHdy4AU3&v8S4L%gi(aB#@PiP{(93+}_Fu8rHn0{-)Bh)xRE@je>nzwjbZ<5_ITOqev5$*3yg)MP()2 z#;uH@no;OvF_*4)mmNnkT8b2(j$yM}hNwr(?^Jyf9m$Y-9cUEoI8qv4J(W${_?+)7 zgoUv{{Hzalq55_kH=72T+m)x(bM+!0TlhwOidyZE)2;b33}l(D7#e3w1G@|L(EWVSMAKQiMj5;|*D` zxoo7E`4b=EL4Ddyamw!a@9(_Bc#DxUMg;9Wp_Z$OH*s|}kU&1vjlcKlsF`wGS|{rh z#}wO?2mCOKLWwc4*(FPyyh_;LEvGUgqDL`@x=`3MdP`ly+qkH1)_KQF2-AR9t2|27 zPG74EerI{?Hr)d%@X;Ipe3kzLf^~uokB*QrvN;dnLBRW=#>TU?aa<9DhD{)G{NlmT#;zcC4 ze4R1~-RH?^+w_s*7mTd?_1hf!yv|t61ch46z2gmJJFIk=VuMw|_tp+Iln+w`HS8Xs z;r)g^8;KlyE5j9N-EY40ZQH-50=XGGW&>Y6DudUpUoE-5jF2DQIw%^3F4V0E$xNy7~lxMwp??&+7 zDU=~fszi2x9pnax%r+^Pf%l|bmJ|Bxs`8)s(z)hc>09QJYCl~!=CAX^hUh}uWJAm| zz^AhLPWySp*@U`5=R_PPNBu)Rzw8G_|F)mb*Y88mkAL+UQ5jh3u9_C4wlBWIw55o! z2W6I(e|cfutP0HFuI?G1f9x+(GCbN_#UAdgvq-$I*ZQ~{!U(?n^Ox)5EPkf1Gc?zL zX+v`P*qy=qAkxaILrE*w9;*2S$Af~9r#N$Zp`2)u;^O}O;>VZ0$(gEDog?BqhXrbP zG@8nKtLs_Qjoxu{>%iQwwlGv{*omigR;fb=cOD#QpkV5WNzHS{1bCPy?+*5!GB*Y zr=p~C+)17r;~#?){C&X6!~gcrUIORy-(OZb4V=M$Ur`Wcrhk79V3GO1{v$F?Q2*I) zAftl=`mNj=zV&cf)Ia$d=@4YTSdV^gSes}>`v-D9co4-FhFW8XYzl+3DUqokicKO6 zufw{hS4p?y+IT%|VBoO>$$S8A=pVu2v49oyDRP&YFPM>3<%dvKWD&b^S^|7w5wQ7eon=#^3FO#T@L6ul{+`Z|yPxP1F##4lqoqUpD9! z8E}xQk<`zNJxDv8+&eNppCFgsoRSd}c1_8h4`S|Jp6f!Gfn4UT-5IKAt&t4r`pSBh zxtPR7siiGdRCedL34b0Vs7KV%-b#CvMdzA`1<1v`F12hIc30UI-$%4%b;IVzvQOAX z!WirtXR2?1fT<7VUg;V+?O^Y$Q)FTlzYo^kD;}JF#P8Z-qg!>lq^G6!BfZN=G!8fareIw@r}gjpD#|x9&(MA zwK7(V`yYRk40J(2_qhU^!C@#}Q>V>V2AS15kmij@Hz>7F7{hlUk#e3!wizdc1b0+kEN!lUxSs7uuxUii2P9)mw-a`N%0>0Fk&1H?7H)V z`xQLGEck~B;>6bh`^K5b+wnzh(J?Vt<+<{fZ30#Iy2x}|y2@3c_CVt)Nt6tV(2_Y* zyE83*She4tftJ2QINFU9+gTigU(XFaPZ3A5{Kud(o1r&Z$=@7=5H7?&TPWfyo^tE;P7{O<|+4A(l(sf#3-secLsqSu9f?NsK- z{L<=30`;RJlV}=;-WUyJ?dU)UsNz8){~w8+(GwN}cunCaA= z={!DPt6_1_z|eQ@o$_d}k7gT_e)W?s9yf%uK&m5V}PA!al zo$0eaxGWE?VK3MlT92_%dj@wCZe>g+a?VH==wY!%t z#+aSnK;hmg`2BUdUEd;u!w|_pGm>YwvotACgW>zyBl3=9&GiDyExu0FA(7*?c$i*Z zTtQbHzUP5X)_#>^4m8XpB7bAiV7KwA7teWTVCwW#r-FqYb@ev}U3ToH->`!yG5)t` zwuqD1;}0_{K5A&$1U6q+%8}lX7`DC!U2PWRMI7oKF%bvdDe5Ju_`OYZ&u-?Yn3!{SXfXa!t8hLy24R&Py2^mS@YybDGjoUpk7J@(w6G`pfSf3 zf31pvf!Pj2$NbV#=lI@gw{L4rc<&&4N=({MULiE!z2EbE1MJWbyCDo9P|9qZWoXXd z#!!m03k+PCISk+JzrBc^r1N=6FdZLb!DbUZ~k2CT>leriLZ!C;nxIWjZbUKnvCx*I2=Uy-~7u0684il zB16*^xD;1`2vPC}oj0KPfHKwPtzvl_*Ld8)wZMSWN^pO^He8WsC~m1HGa2}cG7|Wk zl2KBm=#JG{XM{u9*%-7KARf7QeGg3U8D|GquQU@H#)IX72C29`=Y zd7{1DR>vR1!I@h7YarYEFhZ?A+$+7XrlY)e+2>_rgI|Vvk}yv5XNe7p?XX->VLUey zGi4eI>eSo+wG&^$)S}MiQR?LEWG(4aXIyq~(D!_x^@Q44Zr;~yx%mk-oneVYZ_JM= z6DCAm#*@ycmYsf9aU6LC@=H-6f2!x%ypzx%MoIS%Z)pjlp#fBkP;=FeM>U=~EjKMJ z8w3OjsiMz9np0p?KC5vBgY|@E0qxYVlcu3xyV&}8d%tt3_x8tyezBe6j53)ItnMOx;(8viV*UB3SY zx7ps^9m|B18u33PQib-)uG>7`Sv+V-ay0!~Mf+J2P6tXJll9TNq&yer9p55jmc~c& z1~VgV#>=b6;M3oJtkr8Ms@$fkzVTI`1NBLgLURJc5n)~kZ!PBgBrp*2D8gvwRrl>@A* zefyRdTffsHCVS#BeBez48>jbPThyOe$Ul>HQ>(hnMLk_D?kwXz5Ntv2nyh*)6 z2Q>b$y-2fgSd}d+xhh(&ZY8N6uePmLl=~btb*O>GZ89+mB0H{0E+zWzRM0pt45h29 zp;N?A{-H`nf}X_*Et4T;#dx|%FJOgxEk`OQOmkmW!!B}f3D?v8b4S0y_j?$B6mdKV zd?bHM)ajUzfo_MhqkC1Sl$Rr8S>=N$I&-)R|FXNsM|2tzP6k>c9sNOz{-&i_Y!^4mB0EDN^HwdJ~L;R^JFO)g(^B_yKZW~{LpsRLbIrJVA_2psvN zcO)~K0))$Z)P<+6M!G~v9UdNL2{2*sLTYviviXC-N@Y#=ryo z?P=$|#BJ(F$n;v!sKmkGeYvT?tQXP|u%_o>bk>%cZKX+@rPC~IZ?kE#8ZCaYm^hfr zohSs?7+7Kf-vWwu;AATuB};(neU8PCZDC$XbK-ff-Mg#678O&lZqTu|`NBRZo>a+g z?Wd6)tie^#>E&cQ2gEfHvuQN#%fbtv;bcOm=JO+5|Fogfx>NQF^|5-G!9!BmrN^5@ zmlMz31HpAGZuh$Sk!}#IHH-_GnnV6yKQ_83w&w|0ev-VQNQ$-92y}yN@BY`=)K4Ha zyDWC`B}o%~T0(L+Op=AW6WUrv1awDu@gedc$3dB*AYGNbm_44 z7Rr!c>%O&90z+YuQo$FQ!A_2fl)8#uYa9?wfA}Ls^08L&1budPRaCB~g#PsF2a|BE zV)@y6TT*=sM@v<2zvpsLrm@m}i*37!wEdlm%1YumA0se(+Cq?L+(iu|BsLS@_`sx2 z_?g6YARC&mG6Ub*>s$T)J?Dl!9)+W1daH~GN;zcYOt`rJi}5Ql4b0h9_BP?#3abR6}2ciHYkW6!Y4Q1P98_6wtYV#%qx{>wEtSP zx5*8gSCr%B)3L&se&|=D`Iwk!8}S(hc?2bv_4wt>)wqe)8AoR)-;?bP(-R2`dODbF zH=uk#Du9eL$bXIZW$GxHNIAdpZIs{njO{m`?vct1&D~iw_zI1!jNZJo@H_3HvTC}< zYK~r2VZ!1D2)Fhj;$cNC`g4AS3Ny9i*GOt!`1*K-(0<-@l{XRKEs&7c|6Y^CNGYht z3bPJlERgK>mje5zO{wEsP*omh8)YM1YBgVnsr9FL@1v!w>-260qNYvtjGd|zIwy0> z`39Cqs?8l>7$88d*HcGc8Cj)`1ezw@6`8nX?3v~pcm8blI;Y3+EOqS4Wk;;NwID;M=64RIx~ z!vEa-lVHDBza)PdoD3gO%9tqi(di9r<&? zgty+lL;2_t&%pT+CKHbW(D;qZ)ie}jfhmwNz39+RsH~_v8HTax=j|aF7&1X&v0)x1 zMRIAX>+z#ESOO=Nu)l3j63@|w zW^Wmf(ycY$RWEm#T5ldnH_bnERH61CF*ADp@$ETg7tjM);6weQ`AImBVYHZ}GIXWt z9;q+8n1?+beo=jHu~`jk7M9eagN5sc?M!&K%Tu4LZ@ex>D98`{#c~Q#vQ&3L2c82( zpWF44dWszWDHz_EW+k`q0l7B#{?6bhxUb}a|K_E5hKSG^9xpI6XWBT#YL1;}{|Xrkg=X8oS)mO)q& zjxDM2`6~it@bLC6E;X_XNRO052>`@(G4}V{(C$^0`r%8h1VQthoW^iCeK$6~)0>>x zo75Te_w!b*{XiyQ09!Q=o_6V#vcu_5)g&Zv0jezAz)9ia9YJJ?X-}QkqQPL~eP{s7i--V?{<)ak$3E&~4=jBL8@bjq1I9!eV!3aj_C; zem_^ehLzISu6&^AUE|{eSI^tRObu2ROqf@bE9?MMgmDXV5HhzIq_Fn~t>MC7-@j$+ zEs`nym`ksSuhm!z{Yx>lo1%fI@)J^W^nu`VXSJ29b@oQW>94kcT^-fsQHZEfv8+2e zkE)fwGr8-i@jxhdQ9Pda-rVFw&BevR0la}pTy7njx_vJJ9DxYLx-2}}QTD|m89#dB{od);G(U^*BH0m)(kCVei zPtev}Omq#u&JdQ_uu065Dt6?u@f!vj57t zzFfCa*4xduj<8rq{Csz{Eb~^AIyOtW>~Lo(0rzY@0R7qj44!4j=kCcw-S?x~ljkFjbArAyk1H7#u)71;d^R zUOX-1?0n<)kvMTRgp%e7eV}_sLUOduG^S_2ItLA!-d$>MzwVW8&0$T=?JpWw9nAft zNb(dzIwgC*nOJr&KrG+f9v2wzEWbb;Gpaf3aNl)fsjPS9f!pdJc}{2~;MX`YE*S^G z_TzQGgc9-u27PNBkxNC&M&ao|b`Sh?*WF#196>@Wm}5wnSZBT^15vOo9OwaL;+G0j{7klo5fG@Y&ZFaMYBg&irBOcCiQaDKCcaZ24iUgi!JFqp# z5(l>k>w}`U650s>#mX(;TIuJAh};CI`hsiR%aqg}L5Uo-)k`X?WJQfz3g2C{DWyd| zFxWv=?-N`u>S`JAx=dRkoPUmPYlGb?r7I|h+0QVg5;Q-Zs2UM>wpsweWRHO}! zK4fTqR*I7PQK)Qn>2g75g|gd*VER_s z+*bbVt@3+mJC0T+FJ(vjwV?0isf$itZkZl#5F4V+TI%usnSyTACfp93V8bX$Y0}j_p0#liA zeotlYpnkwJMdan@aI}y7h)Kdd178 z`S78<4J^y~O{qC_3s_T$%T1OuEUhpVnTc zXM(8r6})m9b3Z4I+JwIE{uzjp)X`M{gQajWWd_PXFR#oFc*ho2E#nMbvjTiT0jQ@~ zc1P4mb*M2q95&FJ8+vY)W#I|C4z*4>g>H`RKx@I(r6F%hme|0vL*1 z^@x!U0A6&^=cB!!aTvc-qpevuMdGqS|;5anUy$7b8*j83pnRqZO-sXJZ;p!ef%{dV2Coh!8o z&MVhz_HSvrm3Ybm!U+(VTdR>zp29a9*i)<1HZri z0(8>$o}%RT0sQ{OO81THcr0}aVtTiwelFZ(^f5$+{}U+FX=Vg~fA8h9sFt<;ApnOP zS^5%=tKP~=>X_gGie>;y8jEou`f&KiQN1NjNrQ>o$Q0)=UM}pze(B9}fqq$wpluUfr2|m~@R_WKc(hGEE=n;A;QUl6 z_*NIemPfK?nITMJ$U^PUy|mdcIz3K2-(;g|FgH&_S*Jl*EY5@kJlgNIL8%)(q?8Iy zmZEm^7FoZx^@kMkbW^DUslz?%VOW&L&paJ_J9cD~oErWrOCIRaC!y7#hk8@P4ijD2 z%wf2jiVKT~dX(@3$q^wEr$Bv`(H>WZMxfUslL1NbDEdq(59 zyFPQt>kq2Y-K3lN&65zTw|wgsE4%xZ#oqWUrDd;q=34+>GHDu>m}u#(Zmkyjo^zi+ zH0YO{TTE|pC?{2X*Yc>oGdjsadPstbB8;KRZop%!FNnDLyf63R?zmyqiNIJDqLF(m z3*c|c+2KeQ5}AZ zpjA^}He}I}TMn4{5__Se-g?luK;2gLt z-LPQ*Hs%8q#}^+PNs^=nUnBqa?KURc&U|EJilp^`^GE_wtWx}I?CNz_O`){n&tO^- zgTH3U|AsT+Mh~9hSsb`y0htASEj~cTBKShCAkRnR8kctgBU*yOHIke7I+~6bX<|S3 zGO!4%FOsBcCYD0J^y_X_Lzb0K?r=uLN$Xy@bRyI|u~~Dw?_CuM?#;EyCE>-3O+yu& zt~}^EuJW{qdlni&P%W==EzvnrFH1?BRnLBl8rE9HoaIaMG4gDi5$flQ;XD zi#PU?^K&30gk5NjU=nGkbx^{%IAQ~uBV5#N;f4+|m*R^1Rv%MZ*<|)+3u7?gc(2k! zSpdk-=hW82NdNKR?w>MR`RJf=|LZNUPK(aU^{g~wG+$i})oLWO;`}P|aM5UW_AYho zuo)P8vPi!D^|>40x-Mxtp-Wul9|splhi&J*|JS8v0S!B5!UeMO%v+=c0XS>`w}b(i z(48bCvW_T#Wq1ChAVlICFIv-87pmqphSi);)CkE<*0|7<=&N+qyCI02&hmz@BLgB2 z2?#wMK;x-^Ncm(SN87fY1mpE88G4`Wfpl z#CBo~T(IV1z1|eIl#|7-1T$gXm$hs{{*t9NNnl`x(CurLH5Se&4u%p`&3-rkOm$JW zbi*?4Cc19G{kb~rfe91RT2qla9(DPDKz!VwFC%e5>e=Qi?yX9A!(mIaS^F%7gEAm( zYtH3`ieWn|o&*Jp(8`4cwG5^Lx=&yefh}0Cc_#6Nhe{k|9zAN*fer#BmQ?6S2Bn+> z3UGZ>yB;pTwk34JJ04aL#gfr#1xqWbLyfPSGxmQ>&9%l?g{>aua}QN!MaY%aL*KMx zFnqRMw^2K<|AUXNTx25JH~9N|4Cim3qZdQ}r~-U)R1l-rAlX(e=o_>x`UIE7MMw|h zws_XXzM?*21ZjR`&1}<#y=r-A_N635K~{Fm6>jCx4ZxAr!Rk=VSiKe27H3hFK5Od|_T3ga z-JQzwbT7V9g2TlBFf*a)T!?)3Y2ZJ;2L6x7qwp`N1O%4D_eh-$Bs#7tBFIw`p=ltB|5Q~sbo9;QCCajTaGHHsxVU|rsIlG z_ghnM5r~qnBdS)c_g5!R?T2vIxQW__p!WP5n`_y1BsJ*7K|x9v3AzVNKlMz!m8U&- z)W?Z|eYi$IlJd{!HI}lbO-cIKy{qIZ`ew)$n}T{Cs&&|-6Vg{cvpqt|{?z+9P&9^LSp5LP%;Uv` zFqJ;%G1fK{)sIud=US4u@o42Et-}JDf4R3S@t`hy_Uex`4I%%B=Ki95)OSKH=8#@9 zN8Nbw+X;P*`%z3Q6N%)lJR73cyPttRDSSFo`xOUH&D+r3b1HN;uJQTFEA(N`w+dINm48o{AqF`dud{TFQ$`aDf1^B zwJ{LgU~L6il>b0q{htZErQJ3})Hy;00sEsp+Tko034OMhg>MM8Lc1qOH03VZG!&~| zgpfqXN6`m&C&soy$%_gnw zswCQ5maD$4J2@tENqp4$P7$iB0mq2iD-;aL+L0Vyq&Q{U^6K>ki}mq6%Vtsp*0n*E z@>bc$&ZaA_r;=usA-b^|_UR1V6@?4-CwqTQ71FpEW%jx(@!6ibC?AgnN5Fpq3@ghB zI6gI8&<~^_%t&^XzBmB@w6<=p7r$zdmQM7>Sd>ja0Yd|ezN`1E$F&N;MIY!^J{VkV zk`I=YOilC~-pP~JQVDWh+4Up!PF7#a>t;z`1n9wH5HX}tLx@6yg{i=P(rv#e1A(39 zKl;iwpGDV70!~S5o{{5?WHPsC=PGJ=L1ZJX`;Ni*nB#J>DyvW5Vb(v3mohqZ%It0Y zwoZl7H{ea$8i(Ob&ir2e<6RTWUnJog+YYLTHmzO`X9g2uTseyYZ4oJ`dN1*t&jwR( zf(-_nmzk^tP+nJZruvu42Q2K}QmcnUJNeSOJs&mvH`CLlS16=+6?eY-u9YY{a74As zA-o?+8Ge)TC-yOKkG&(e)H!KY-PxXRNez!q#``;Xr~RSHz6ki>=uu-EdE7~?>1I~d z^8?qN@w}}`-7~~7bV<76f=6S*{oZ4O7woi*!)Wo3{M3A%IKF$VPyjx!dfNdv9h83i zXcOVtrFM3rDNcz8YBr1{y4C7u=L%bTKrH^sbTI1cTNb5f|2OXTlCt0Rt;R)L@2x&c zb`7QdLL>FJ4@cIVl2MteUQMn0&j`C#RZ0Lun(tRUF<1Rc9U9aUJ|RS7yQM`{PJYvI zOKY7WQ_>RfGyjv$O`tB%E++nO;M^>vY=w@sL*4#L%sBLC;J{V4{o@r!m$kl{`0aww zx6UiM*&X88?l>@GV6SYiO&yBV!qz*w@yWwfEx=5k-1+!v^p4bDtNyjz=n{Z8iJh$T z;oFlQ5?XBVsl!%RfIESsp|OmKpp#?@hP$l{|4~$$ufWKFDyTxc1cQZgf%@%H)hT9r zWrha1FOEBQs&;?$MsqDm07#2gRSo9BM&e@n-%com(U>i!7*kMubLefdKpRa!M=l_!D=*HHQJkDc{cCg^k*iRKiWz;IBU@ z?VG$%@_#zj0Bwzy%zIk!g-{ezNhEw;q5#_TdDFpmB(uesVrO@7>hoUu|1lvS=sEmZ z)(?X&LiEjRIt zGonpR_iR%8pZ18(0kA?+US7Tw)5)v;Ah3S^-Txn=Oj)FyntF^7>D*>z>X<_uCK);_ z|33T*c;ns5b@QHN;;3ecJSYfB9?O$e(-l%jVQa266BtxcfNE2%SDYY9@e;x~c%(R` zX`zD8aTx#_{-;eJ6&J^egu31*7^zpF?=XTaso604t)Je6G);4gvf{~p;joZjU_VDg zGU(%9+r99HyFo-!)4M@%D?Q!)OB%%$b!YPwmr4KyYxW_~TuI>@?LCb4rG!MKGv$HT zm0AA~Dc4fie0Aqqeq`rd(2^9?PE)>$oKm2){xSZmt`tmjynW5{m($@cO30EatYD%l zu~N=KZV z=t_sZE<}>G;KT$NqoL>UyVgV}b>f*hhIXAB-Dc4&eiVWAfOh=N8{fH3FIwEY*4t%m zg)`1h_W}Ig(@dN+gV;cw*G|B7=3tY=*om?h#f=dl1o$;VUYX*V*mi(8ew(SpJXOGXY8P5or+%l<(W%p;( zY(TG_f&}c7cy?ReB4f!iY1f>-HD>K%E|ViN(O!SjRD3|&w*@(@oii%1XADD** zb{Rw~jCQby*QyeGA0T|?tTP4AN**3j+_sh`oopF%*XD@1-)V9IC7R<%$q&3_%t_q85S`nQg=IMa>ojA|T%Z^qkg*#n zh|kVGk$3!dXf=@LC;s=NCBO$FN!8KN16Edfdyq+>3a!*b!sIgujjgrL5-3 z9tVxz!Y$|N&sXMCOr{(fNvjLEyyS{8jQ~Fd0u&Y^^x19I_0YVVHhS=IUD6||V_XyA z9%?AC2*sdltJM6C`3@J18lw~$Ptuc}J2-IgzqbW| zFN=_GvLuZR5MLBAeUgMgLIVG#^KVT5zQQYrrvR`eKDy-hYl^N0#fS|{3P7d*3+)HI z@z|)gNOz8Va4a)i2!n^`%~p({;~bJiIuh2!Rlp-Lz*(0u{jXoow#%G;xzpRVMc5}! zucf>F{w?dZI}-%nN3(ZwWG9=3gC*Yl&k}F4O$$wb=sR>>Xmv)z*~bRjteckNV2;tR z@%zfDr{y}%|5XVHzD~-3y27j_T-nYP*L>*>r$m?1x-nz zSZygtz?=V2(#q*_cz1p~9HMIrG3}@L&WK+(<#<)6)B&%T)fLa?fq#gr(@M%4n$4ISIQSmH? z5k>GD3do&)@aPrNg@WW*oU7el*R~(b)9YmfjWIU$`BWl4nPyMmc$-T-fh_=>)9?1- zCewRd(RYrzi`b(!PeE7!a`NZXkP7>s@5pgEE56yh%wF2EiUiVbnlBr;ZRgxNCI#%Z zm?`&8P4&S0k@V6|lZ>*rn7AtyArSC!iA;^D(rHJKsw^oYNk|ItWWZ1XcvZ-bL|>|0 zR1;k6HhGTg$)P$sFdtsVYHOMgx?>z*`~au|z*VcyX&L(JHlV*$bDx61|BMuXL6Ey7 ze7sl0{v(*Zg{>IXZhMdh3`l0rpC{wUsJlc75>v!F*YZ|C<8(Odkm$cnS*GX=1y6_Q zIw7IjST_y&0Tim65mLAD|01lbwV%-4rsg)jw?sjIr(h!4QuR9aA+idLA-99asn`t{ zUJ*s-=@rC~Ckb~h=M`15eiHX69HXG&Z(d^nUAq=z1X5zJOJH%7Z?0k_Lp3{mAl-@= zcDm}*n;JGS?FrhaejI9GcnfqIx=KctH$B$LGnI>h`Tq!vOV~AX{QFcO)%YG{hJU?x zDR|Njcw9o2-B{;jVf+6VN}c!zrM4aY>v!UO0%hB})R5id!`A=B*;~g&)wb=w*exn5 z0s<-}NJy82sPq7ef|4rIB{1X=HU=RrEe#?dodX8aJ#pYL+dmIC|ckg8X73y7uKbduOKeP5@%6hZzyrRTj4-+uw_VAb$ z#Rqq_xlS!A9gxK+Q8&<*i zCTNMqQX>5KO~k_me&3^E@XUd;-VR+)LqB8pm@HXH-W;ffgVc<$-@Rfhtip2g8k=f* z`wPmU=d2=#7;vl}E0GYoNiskCjK!7WYc~3y&G`SDMtKF3eA&3+Z1#%XEKMJ=GrHpD z@SB5M4f+eVJSyQv4?9zhRjE`xwhWcJ0kmZd_xey*1k+1Fu@3s=zg?R@w|IHayYpZ? z1)<@Vd|9EO=q?INVqoXyE?oA1z+&t;tHZY%X08OJrUrMaZm*7h4t!5i#tMc~lE|j5 zg%$9zvd^rQ^}3Ad$NT`>2i)9agPCBLYjyeho;Sth~5TAC>Y@mZha}$YLVT| zx@;pcG-?JH#8?aK#(OsMYM@2WX3z#z5R{NQ?yK3_Bl)CWOWFN+`5275eg4L2*zHdJ z-JeB%F}n*qjZ2i={BXF~Q zSR4C;Dqi3Egm`1w6sY;Etj#_VvOoPdQ76Mv9jSVaDC}y#Ii_`4Caaa-{qXVapc< zXDBG?krp<>9EeWWW^c1xA)f!pmR&UV=z!)f`T4XGX|R1bE`(LvY@N;`82P0iC% zI$3wY>S^SIRV1%zrrk5(IBeNt1oIVm`GDA35tJH_pedW>-lwJN$bcg+wWVs*z{DIW z?(+oHI_!#Szy>{nv`P-d#@OJN?I)VP1@9JHAmZwsn-;za7Ty9MKTn!gt^nedu?KV+ z=B#>tpY1zkk2w~0j!)~)QzT;kte3yK@4j26nk-33OjOXwSH73+p!;>DeP6{ZRJb9r zO|$1jU8H!&wC7=(hf7Dtqiz~xl&M6yjM3Oln}gkJ;n`vOmD~EOq$wUQt(-3`r-)&# zXC~!?3Kyi_!$9EU7I;bf`VgG2P%sdgw4NW)-+WjT%&Bd(R4T9|-*%C9t-42G5GTP8 zLi^c=N*sqLI#mC_5k7p-1D4pvtMP}It$3YHSJ5<%J&g#VW7|dLZ>(}I-`GblfTPpx z2<*B4!*7s9lYwQ`6|)aykic~L^JyUq;sa;h?&R4-$8rDc zA5fejhdJ1vX_mlG60ef)xcvKp_K<`NDo--a+uZsh%#F{3Q2{E8f1Q9~j$9c-!0g%6 zA326fdZA+7$7;eRJ6b|AJ4_<xwwO`tC5>{q;`#T}(5@d7xixZ?H1AuQof}rtKoB#@%EPgwFSxxQZPYjCt`j59+@gLL z(UZ;8%U?M|IyF~6K*08VU#g4rm9pk zPo*jOknd!&8vm|hCZ|`XylJ-Wh|^F+B6?ONz3LPQgMW$5-xwzN zK2dV+h4)$H63;QzAsS)2p%AKB*a5izUf{Axgk*#E1Ezfx{nrqJpxx=mt>^oTetqN~ zN@j9L$7tuhomte>+mZ{FDK}-?!gvXNCXT*&GROMmVqk0e(xC<<7&*CA)e z)^uD?jvs(h0uY~drga&Z-ESkLF}JzU_;^><2IwIu9XHpv>bF>eL08C{;#8J5tx#ZZ zuMX}W<)CQLga*8X|FF)Fc+&UDs~NjXj$Y(i?Pt_;g#s@PHz{i(vlX5kFtrIMxM4$FXiHbEA4v~&ioQT%$3m<=oP%LkP@GTsN6uneU$_f56At3+=eB zn$*)?^t|2NKIb4kO{#2?BW@WlKG(RPi3nXMsLt`oY9YxRD)H`Q*uL$|>5xe^T^G}zx)2hxEZ zv&`lSkA#^z2w_lc@|Ld`9)6b-wC?X+Cy`Ainm!(2^izM=6AHi!Jyw=#g5iZMNyhU8wAJUa?7PP0y138ea;jc$BSFLM=(b%Q@r*7L)&$k zNMYI4>ufrS9>cGA>h`~D&AGkuxcLHZ*{4bb>x3Sxz^RJ&5oPXO_Hh47D;YKc=IE5^ zetMT0E}kY+8nGO6>YROV2!bi*Of%hg?vK4UQhZt^%A`&dp7+sT|9*BK9sYUM#3HRDJEmio>1rU-FL{q%GsDu7-In3N3` zJM^Z;n?czR!96g!R1r+pD=SXaD`&c>#SR=4*Dmz zrP%OsylC3Df^!S4I8|H>?_qir@8qXc<({`x*YX{OW~!EvLG~OntGszvFBcpDD-VZd z?OXwkmjKwnvCcudYvXzyLZ3SZoSvKW9mcX+7caKYuid38uh>tX@p|b~mZ5#WPhUvkhcP3-lbEcMH_|dAv=pew&?t;agfz2x{s;D?)vgW=%l3oT53ql)|}WM0#neIU}?IV=k~Jz$x72)A1)lPqs@DqWa(C3ZU)c08VMqGVxY%x0JaMJ>Ip><1?i7&fg4*gt3TU1u*) zbK>KO60_jE^5+q<_`>qLt&G?=T~nK}|3i1*Ol18GePeB`8=)wF8~^tlrAbIrD<^$`Y(?wx9G0;OOOFNu6bxg(p_@a_6ZQNCzqDvsgYLe9-lketx9R ztDfxdb7k<4)b&TK!al$L=__)7eqp>fXEw)AT$yw|EMeF_ZOYKeu`zTaP;&*Y~CzngOt&^zSl{cDJiV({qaFx_QEikCUu=;!Qu$3v&N1u)mGM{9zN^z&8d zfy_bink6z%M=m?g3~grHCc;(kl~@3JySi~iou{lnBEHDWvG#yqw`C;hrZ{-ep|)NM z+vWcJZnL@VkVKhKrPyemUI4A*?j%xbg*-t&fn=9_(*#Z>!fP3MmV%fJP&6T!XE5|x zDvZ!32?k>mJT%EinD^=`4#9~x-tgV&y!fTIa0sGJIvQ}}Yn_?H^Ig=@;B33uwD>3j1O6iP{+UrG@D)m4SJ9V7 zE2g!l;p!u*U@HJ#m|B6L8!LH9GL*Qsug*;mXZM~}49nUmPIhJIz!C&`MJ+ln^Sk{R zs}G-vmKH$M$_4djC3NxoqMhc1GA>h`TiWiLz0}5ygLRJ=cP4wUL7Rw;&Sj5ML|Thm zd2?6R8ie&@Vy#niKYqSLg_6a?d&HwcUSbIKH8p%4Nv!QT!xt}%=NvIfssPC5hphXH zuN{rBOrW(2$rf`A9;>hQm)1K8Q`3WaiH%5aaOLe4#HWg$>{OU+i^CaQxx~TY553OI z9i{1_QDGX+U#~+O$eaZq7g_`Da=tf=%zHOtnqSo-zH0x2pjAcqfh8@Bmo_pNiVzY4 zsZJRW;u?_5_42PC(?#^a(#opI6QVZj%}q)p*e)`h1fM=uh(7Oz zsZ>AMC*|12pap0Z`X)q4c@;M87(yr?cn_el{CC5@sMBH$)kTfCA3oV~(!dWVD24Vu zX-Vg_;Vm2wY$fHsrI}EE4=rmHNPn^Cld*>;gZ^V{U{ z?#+C3*DaVbnkkiB@?VlV1*>Aj_^A`u0HT-RQMTD~p-P@nmBsDss=;H#h(I+I#A?5u z9a#Du{$GT(pAlCnqkv6f1cp@t88iWoo*AezT0kn_Vc~0!FP=)iJ?KM zD<+8&OG)%k?GGk{x4!3ubqoFr^g;m@DcbQUKYhF^B`J#bcY|yTn_4odf0)gu);QXF z|Gj-ZIX2J7Gpc31X{&*K^DIwWG?GT#-h$@{oxtIHz8^PKW%7hYN%;ruQIpoAo7jO) z)z`)`4f$*VlJZCWSly0kF-xr~g>VLEIA%%ux9CwxO{_fs$WtAYuHY~E6z3xY=%}p`K>jyvC*_VMq&L~Esz>Zei)q@JmbUujLSn3ao zoT$58UAF$SmHk+lkBJB3#+1A9QgL;nxEfaObR2_o^`8}I^oU@ zT?mUFoZ6O-s{qaiPk_idpDj!mQgB@T4&M>FL3iTfo8#o-kuT6DL*v-4?B^P%dl}}tugwdSdYSay7K0ETeXtB(z=vK8{a)${ zQSECE#}*u7AB8_7{FZJ65N(v5mmh?RTSuK0dHgl_YjfUAsBK%2X0>1kK;UZ%Sll8= zqtKrp?d^B7NXh5ATObY61U9fxCUCKX0on!bAt=kjTZ-?4I6i1xsstpc?1t$_npUEb>!{)lpuVyHaJxf?IP~_?L!`Q}E z)&yi(+`cN#pRcUIyZuY2p(CKcs9W|B(B=Fb;yblSVZ@$+AXUxjU}DTRvlqEN8lDRr z`D=mOzKLL*7ZyR^;SsEE&q`CB+_YiYH~rGONR6ByvQGowFWC)h&yRZ}L~LXb=^Wsm zC|7U=F0U=r@?;ybE z!k(-anX_*R*i0Yn%_Mbl4mSChp(-FHK%lukc^Ee9a#%iQCH@&(7$#bb0CCp_W z6URdrm%`^Ky@XMs{ep8wtw0*D7EUxbv3K$retl1 z>qV)xE-pkPsXaM6c{8LonYW|5m{4k<^qv#2@K&=6H#K!0DD9l-E7nA;l&8^)LwV4G zr`jcajix~khYfE7Yk{?}+iB*j%FClX zsNp)q2(I*AnOHK3XzG6SN9su^W2xw8=ws{{&F81#SYpBM|C6^z#H|8vStoe{pVsr? z`f>kSQ2*2e+)U4ipac(XL*%6e(DNgddg$a!6sCcHk!qLs%Zl=7s$$qY2?)IFTyTzL z4_9{T#_dptx)o9xnF|4}x%tl3ssIO7urEVUFs|Wxp51&BuveZQpnW)8oUS2Yg)tA&G+lSjl0w^MR6I z6(ZzrUHCNKp{YTdOM4vH&3f+L<+p3rSfob zGy88SIRL_^NjHZld8}9DMm7ghvoH7-~qkr&|jT2`+vm>H1~KY1B@TqvHd!bgw>gs0R; zs)KWKDwedDTb#x1&m>hSP-D?qrGUlb+vbbaw7b~+q29rQPa~rEH5FmKw<;GcwL&?Y zlVFGz+c^{Iu=#aIOA%_3r_Kem8Hknzk*DB0GJLsCi6$vgV{VV}M>}UkgF=FDajudh z=nh+C;#JIy_cqeo^NjC5klvhg;pQ502FcsOCK>-dCQm2}DBUvQ^?eE=GG1;1#@n9} zc6!I7B%hgt2hU&a=!oyhoi>CUsTWWq^@`$2c^p5NiRvvfNpB0KH&m_$dV73vb$Va% zXp55Pmainm5ueOPAK5?N+m9dzgM*ukI{!f4clK}pt^lZ~0yP~BbzvS3Z~{0+zKO{r zBg8M??#XWyVasytj4>UU5o>Z?aP$@Du-aWy#ZUp4Ts!PmY%I^K$( zI|~&+2*3%Tz<;mbtC7o2sj$i%^@-W-?ZHE%P(>7$xlMFSinaCpnzqcr2r-t5LO#%D}&KApFi!(gcn`&ogWp~+|DNEl!9NL2Qtq~^(E z`Q1?p8418B`+8^}lq@VVEtQt>su#V83OaWXG5V2{|1IG>aOaoz z-k8d;R)pXTbg0n=JF=S4=XnO4L=R!`~pkr+kPY#qiM zSd>ECA1Qsu4DopIdn6@(aWa`M&<%(=O__!_=R02Tv%HX1F!)=#0-_#~;WDA)+Me zop~kWR*5V1Qinm3_nl~|+}sJNhjNXi_tO@3DvKo@!DjS$en8t9-G1F*NJ0`2)*>Cd zt>0InRb(WhUGx^$C!ICKVwJK(#nLpatgODizjr$kH@pEOm{D*G@*OI|?{tFx6TGBL zz^g*<7ppFsu9y94sq8X3ECZq|IIYRW-`Mn!GR}N?!VzXa$q54Q&k$W3LxnS3KdDE` zt{!_F>}^PuZg-LHxnzWGB@`VZC(kMbB zq?iC0F^8oe_vNaaDa1OVCwqSe-%dPKFhLF#Yo?dH-{_|g+IAm(BlH&7>d6O zjgmio>Q3pH!zdx}-zds9@-y(n9l-bJrmk@qAfgi4 zTCJ5l)amx>{M}bwP#oklJ1I{1s?fz^{DK2MLLkzAX+3iRrYOj zP66i@u_Q${_PIvh?9lf>t?9pBl7f@wjH=wqL=~g%>iG{SI^in7_Cv4a1=rOpEen06 zZkUd7tx6wy7A(;v8DHd>>rDieLt589rR53AuSf{bzMeU%N=x>kn~=j}7e#c160jp! zqu}xH``H887~ieG>D!9QHm(h}?2&LQb)4zv0$_$8a98r;v*1pJGHy7LMuXFARYJIp z=$7IJ=W)?}4}~_)PTwVaEsQS`Tu_RNZ;3RIqe@8qoZ2V4K_xXBm!K5yNGQ!K*Vc1h z^q!w$37cUf57Z}=Y0Ax%Au?GCiiegR>AFUVVfR6}P9>{nO`E;S`<7d^`4O8E?? zcMzesw9tlQGZ6J1AcF=v^L@Xam{V!Y*CSbtYg0+)%E9!fR)t@p5@NUcut7zCoM!HpI2u*OzUyUFHF1I~i8D9TwAZ60+LJ z4&)De7CfaSEjFjYQ*EKJXqT?!@lOpG0;$sG#Cxnwn5T1f6A%vHh$? zgZ7tZ$(ZTxP##2Z2RRZdP58kQSbG}}vA*AMr2hU*7U*{#jB5XYKs`zcG)kBIb7Z@Dsi9>iXXpb)i4AzhiT`mtpK zV;Ato?JA4r4ABvjNt7Tt%C2oaPHI2$tOtyiu#GcZK$I7()N2RWs{*j*L!-E~R`%>c zd;!R42p$b=zlWMjU+S|KJ8B-YEBIk~6e?Fves_Jiu<+XO0IYcO^df3Phk3!;+jTAe z>c-xsi*rbxM|RnW|HSwahxTln%_BUbqk-xpB)AacNZcJ+edm|Gq#lJVi!R%RNR{!W zXmXvP`k=)6uMPi&uZ)HhP4DU)^#txWy*$q5>UyLMUC_lSe!9;ZvNqr)B3kJif*P0I zM?UC{qt!H(hyr)TN~xvijfYL;z7F$bBkOhLN=aKm zX7ZQz12JDgG4dqjg#BVcQknE`UvH_j0oB|+Huz`Hg+j|t?M=WmjYG9s=<2dTLQwgI zHSekth??j(btUz!7jDpu5B$D>k~XopX4#YHVMxvq=DN51bSihamW+wyR&`sSQ_R*R zJCo?u)2CSc*5_XFH&~c2MSrg1$7CSUVF;Ko=aHTz#qW4%&ss0(TlAVN>E$C-Wbkzh zC>Utn2kSyFXyPuf2T1HA?c{s2*aOHhHZB;NbZB z-b{X`%R9clL*E>PCYK>;R${*4v*RPY|Ie$@bb6hCPrF;q^VxesGVsf&eiKjm%f^ox zbBr#miAHctY>mCC(cR&lgpB>UmEj}cSPtZl6bl=M!m$=PA?M>g@>@h68B+>*yHikD zi{(2q;@g;NIk`VaUU()UT=E4((n9ptfC1%)Ygj175{6LM5yV9%>_ zQBcgtS3}=!E{NVx1~h_!k_yzAq9668L~prX7qaZX&?vbmTxey{g+{;KmW2G{V8(nQ zsU!ZvD~k8aFqC<%0}bMxFF(CIQjHWfI)HmQerJg^dY?D z_d;urvc>OMM(MmiQq0utr)vFdGwg2UTQebA;L_y7sj~i+`*_)CrJylTj4dv zrPZgvI!`aI;IFA{1ZwB>O*CS{Vz^TPzQ@1s@rxZkRYA*(7uL6iN_K42OY#t?vVCRy z-)5EJ3YFNhJ>_BLpFV!JN67l~ty?zD-@y_UZ)1?H=}TVW^_NiKz}_kPd=F&IGI!2O z+Li-r{ernaS4c>z^h3B8=N=kI_x+qEZ<36`V72ckL!hRf zd-d6T>yQUaPr{9(H;N_R)@2#ijv@kP9>Qu6qBqYwSv{SDQ{i7jf=Myg$03w6Yo(T} z15& zaU}%>zleRCCb9;|c9ADgBFE@fw;m}aB^o5_{6YXM5TnSdj(Bo{UnCy*dA8@b$IOS+ zdWLF(Kj8bYHqn^DJvg=J6TLQ-Jatfs6hpJ?ednvAWw#OFIs|4~o>+U`pi5N|e*B9R zcEt#}l=q$R+k9Ok7?%+!xvPQy$buiJF&ZbL+bY(TxY?&(?k`x`Ah6YfbEU?bP$+IO zB$xEGcr>`DhU%?y$T(NPY_TRXc>VI=hy42WK@hyww>ly6DEH1a9q_rxqXXR6!~+Tn zR+5AlbiAJV(7OL|3I7Sq{i@_sBPgcG)>^SY>IEX!yN!--P*+6>9$5&hqk)n#(MC^B zM}&B{mMG3P80Wp>HGfs)$Ye(d_2x?1=$q*1&FRxCjUHp&*0rB?^Ys{3aZG$hL=*nB za34uJG2(?au96{0N(w{*d6d;1K-9|LrhNv{)a_bb3_t|CNZ5dS<8@&a8^yU&yb0rY zVQ026&w>u~%CJg@R1qAV5lAi~z~xILiXNbN!bT4?{hn)@``*TfvwECn$ldeWF)1)G ztCH8ghbzB|NUiT58!MxI%SdxmC0P)SH%xYWxG5Rdg?Cl`?F=s9l94DbW3CQ z_ln-0O&VRCamL8mixL)L9OiODCwSUxu5IjPCu0(ec;VRzGC5&fC#YGSG}TeNz@r>O zXSEr6xail;Yo(3Fv+Exl_heX4wR>jE`BCrs7sijAy@++0 zqr($w>%$E834Y;^0W_gQ)&WMv z3hMZ{Iq@UfS@4JZm-e)-OMM#Amn*-Ok^~JNJk`lY`A*iRN;3JIX(bPwyMx0O?{U=b^Knb6tevfgx(qe3G8`ARt`=%d%I7u)^DEhzjs+u!Tf8 z4jo-(58=P9cijM+j?MhCWafpJx-7Sf4AUj84n6O5`MMtZRm!o1d3?Zdbe<6Fp9_c1 zM#q@EJwKNkwI#_?dt5aYY^o<-Z|W=_TBJKU9hG7QA*>V(j&K~s>}EbXQ~mkfWiklw zN3nLt!R~oI2-z{*+6AXel8X z>GicoZHn29!n3Ed9kU$?{U1Brk?bG(w?g|Tuk;o*fT?i~yV7mWYRU_f21|vja$Yc6LjmPh>Yg7P0PFKv`V$V!Mga)_-Dxfhg};m{u%9F}{#4b>@Xv6Vz8tr+ zL|HD6R9ACwwe(av_bcfbfG}hsY8@%a@!M%-$qGFNMe$Wm-Mm)x&_WU9Bq@>IH*^R7 z(diOUNT;s?L_{}vCyVmhz|$Ws^=v6rH4|6y^JZUPhf(o4kLgv5s=0Iu+-djmVr4(M zN@%!y_kNNa4nMdqd&rc}EM{{vLB65tG+#BB^X+Tfel#TSB&LB5qzS-jic~x0t){@} zx#Vzo5lby#KIfJKXy=XFH1NlTx&d2=#<#C(A|o%oe0c+*q}CCS!m6J?;3RkRrXM0j z5cr*<#6!>UI644P7#-)p$Hf)Fb6_C06DZPl3aYB`cRdM!oz#DxoxO|p6-+32UT(UVrZiN$CqM?1uyg0}!nSv@{^~nrp&7dRjZFLAP!K zi_8rx((37ik<_Y^>*6A&-{r(*Om@8xV%USRVqP1&Ld^rmy3kG2AJox3`*&2I@3bf6 z9+9>%d6+P=SND0+{8-fQH&0lD5>LHQSuU6h9kT4pGdT4orNzT8i$7NzADuGuLiGy5 z@2Bwp{&d$`T~uL7t;wFdNkvsiusECrvK+0u>@p$t3XH7XgQ+%J23@r$8^LGrKF-#g z;3EBeol235nQbJ;V$tvxrFhZ!*PG5LIjSJ7{Eg%dVf9Dop0~|X$y;${%%^0(+%Zur zdkUdoPTn{gnWTjqG?7C-i>jb+pqXkv8%(n#LOf|R%h%JM&*TiPjv2PP&0NbOp0=D) z9o<^|)noDBt~M^9ia!-i=1LjeRJrJ)l`A(;(4F{IRl8=W(gHY%>q| zW`TWg>qox6k#APaF$(Qh@E6#P>8ITD@1ODaOUXP8eY zFu)bdA1j)e0It|H+sD8`65jQ+*JC<(ppFUm1euydDR**l{ z&r3*-?a?c^v$7J}ukJ%#en5trUgG;YZWP+r0&5_w3dNSa@}>>jn7&5{lZeeXn$gP6 zfSBN}H6*XLj_u{0;Cu6j%8|KBrxc*D7-Q67;Nuy9gPS&hC-U# z-Hu-Lh75SIxuCAi#f~va%bQvQ`yM`k8iAeWB=gmP=Ie@9Cg%gDT_gr?tIS`{)fV~R z%5hoDIL~&I;_H>)erNu#M(M|6&lva~z3vhR=_a@-#GEHXjq5VwlE0|+M~hdU&9`b( zq!r?%s~)-m?L#nJGXL95Jb|$D1}av6+;|sXZ@S)p{hFM-H!Z&`q9Q;P6x%Mqqi*c( zl;oPuUp64uA_M)s`8FT=L@M1cE>9Nv zF{EWOo9~q+sjC@EFGyfuLh{%-d=0*s-xBBL*7q|`SFkh(tBTJ?1qM|7t8QbW#!3K& z&dY%j;KZHWjYjaF$&H4Y?lXMFVD|mu-3uwFf5HVqNRJHI2tKXGWuOBayIVpYS?VnD zB|ZDKM1l5~1W z&)RoHAQf7G$I3fX>q3xHjX>2p9W5(RNxfIJ-<&*qUF4&wxc zuISX+Y7=Ua7tbK}2V5WRMS_@wp2@65S2R&=CCA3*!t7*!7%}B2kozn3v8t89H^sht2d8@fVr(iWd+xs4V&ox>Kf6xE% zJSYz*&k>V&(UbQ#3E0;W5Wg7mhI4OYrbS^>OB+vD(=hg_YnNfwr5W97X5DNGw=HNUSM%KZ@p|7?HGK6_kyuHhE)p6~E`YNLjpi461iEYeH z5I9=7bGtg&$}(98YXzi{1JyA_59|_=S<`JD`oh(WyOZo+f=u9(z$r*F4S?ee*g762 zJv7TdSxwU=!z##i$(IexS(0tDJIUrX9Yy%EZ-P~t-Ii( zooAVy@H+`R$GSPDhdVR~eJ3QB8)?{~yXS#qTHiWar*}L8@dw(pIPH+%3kC3_qQG9Y zB5w=k(7clmCWuyT-z<3n!lj}d(-0nItoxp$bH(Un^*rthQ*Xw4Bo`d(@nTA^f~wIxDG?Dv`}R_C@cZ@RiIXZ=kq zy8LZJ%|~;V`cPqCe8G<gWPr2x+d5pQ1Fs zd2=-C@@niC(7B0v{Ce_*Xa8%)mGz7cf4OGp<=zsq=;lOHX2E?V(DwfP zwYvU6kmU1`Oiej8gDQNk-ylLlUzgXcvujP{K9fBQDd_cJHEnCo3xU7MH6ZmTqt5AVchdw9X#Y*n^++Ib@_pBZbY)bEix zfwVEJQtHx;Ye^~_4F6@qJd>m1wfv9u(~X)y!^ZwS0g3=7zwjW#gm$KF>T#lfw%O3#eV0D)edm z2hQ1ouIhWMp`g#-+_I^3$Sn&p?E@DNmu>lvYWYZaq#{pW+&@#-DamvVN&1^z0BpfI z^)k6?g(%Ytj;i>@BdFA2TXXpL0!;T|W$Ej4kQ!6xwy{b$;TY(VT zPHM{S$hoWkADmul54Hm$F^$u`nQ_di7{`Sb&}{~Oz8hs+bG#Q4?}I9*o<^KiA6ue} zM}&_S1Fj3+TyyE5hP+Ig@c+q(@NqT0V`hV>hJlBw6Y#*KE@I#(AXF~$EO@iUj+d)t z-0;qj+J3tKl60Y4^jE_tEFs&rQt>;(SISB<->mCXNz|)fIY+)09u?GsJSo0WNc>Tu z^KKvBLiJ)5$ZLW}X?^coYHSBc+2fqddk0kr+TKBWAudvv^38!Af#gS(Lck0{6<|gT ztB~z?;XBbPlgi2|iRv1CA%r4i8lhj>Ci2S|inZ#>kxVRR*E4!X`xOi&RD0c@FU|IC zNo)ay6PzB}x2?MW>b3eePKtwT0AJ+}hCU-V#-D;T5q2n!ftc=ZLvJP^bCLL={|JSD zbk7#*F%$kHMilyfysbBPigj0}WaBYscba0}w&Vq|MXxKZtV+NKY{+%(G7PzKWtAfo zUv~;dG-c0K-ax85mUXL5$@IMC1JnD8@!x(-M(9>(Q*%Zq^7cacle808?0g7UyyLYz z^o{tZk|xepiRA{Do?~Q}{63aVFX2#ESD*ThFP+2f+v5|GF=xq3AG(CW-aLK2CCA1< z)MiM0jXeiR61+Dor>|VVx=R?#YQIW>WffErI0M`5*V>$zyB%>zy%-O39e%9C7m^8& z^}xn}qfy#PU2|EwJ&`X|FBS<|f+t8}`7Z4~@5-mwJRv#?%c_}i&tNFcrek@ZIFDXG zQF5ju-?z|uann$j``p~+Keg0#u@*VJNp!WS=)60Az()4yIkhrL?C7UU>B%`~nEsU> zH5lgQwRFG4s5M#fjXWe}Ayt*H-@om$w(k@Q^g3QgkmVtS^)cCLws8I)=P~&K%UnO* z4&^!2Y5_L85IgLAPXMAx8(KF=s=y0Bmf5+bp#v1J zCH{UTP9XVt3#zLkxNG7H-q}THKggA;BIZIILKmcYJKs{4(-euUgwl<>h13soxnKnH zeAb*!CP^jI#C$H!l1tyBQ!VNwuFDwRP6>Grwu9Z|lM2xze&XVqlku%@qKonY#{E3| zVvv+^W+7y=b)R6~X`D&A|85BH+`cE}StLQtqcIiYnRp;Us>adg>S;GhRcieb&_lAi z7kw>0NTMqjy!XxW+YRGp*S?IqQJU^3u|pyka*8W`dCFK9Y3+v;);~4eJABumW+=w* z&7Uf1slRr+|8@qEJwK9n$V1GYX9c6SEu-G-hsHdU?77_<+dklTuGakV*o23_x3s%y)iDBW?y!N5@9?x8K*Fvj1o2nw(01-TZiO2X<-*v_gQ*@-LiOm1c3#DU_Gg{4E{wfMBdxvbSeVLGV)pKdWC!{; zvFh*7I|xM4Y8nf@l5ba;7c)*Xr9Ym)w1ghpBaF}6AmCIxK43d6y9=(qedntf-j2^> zwuOws0O(xTLZqnWfuTO|JJpvW>D-KzX0DI`MZF0rAT|E`A@AcFt@Tha_p^L3#%EVy zAeX%*#f};xq1AB3DSvqJMmHrk2InVN+Fzbtl+(^wLt21ee#P1~nhZUh#5I1nvBy-$ zH|l73tL&1Jhk)`w0;8k~AADZ7>qaLQCC4IJjHmh`qB7h$ZgCk#x(|5kE}F8;Je#(_ zJ^o_c$e>;kxO0#fO9w`-?L6thL`U3F@$QRt80$6>`^-BDHVi@*A5PLsassjE`gb-( zzY-E3R{P^)0v32$oEag0zu)*csLXa{hX6H1uYU*6U5SUF8kt{ga8=DG(@VMQly>De zqL)>mtel?ymOkUb(YcWLr@fK$Q;5fVn52CMU|I zcb3^Pr$BWQdZHl?mOTox#fP=E?m@Ov%k_c08U4_BPfdLN05ccL{V^c=8C^$v`DtsP zwNMws5A;|cJ2G=qXik_^^KoHs&38)b0OA|zg7`*C%wnLgW;)^}`1oC8k4gecf2_hA zCP(y=y(OID<{Rg(q&+hE@l@!72@6Utiv6#>6Rh>N;Etrd<|b>_7px-IY$GNnN+@Yq z3$`RUl2! zWNoMxZm5_I$;qK+xV+X88Gfj;{RV0M%=v*# z137-(*GIh_Paj3W2#qq3f&Zm}i3>e4PCa>Ynp?lMeJ0^eMH;{twgE^wkSIFyB`y+; zHZzEPc{OSJrMP!ThP&WRaHw3eR&$&@4&s#jkA$M`19y|wJEEHP+CSY<65Wc)Zh1q+ z`hi9o;tjJ~)6|83MS4TB5df3n02gqCPB^H8ZQWG-DYw$E#k|v&C6eQx?VdTTI?PU~ z(D#5x`bdgg#0zjU$}{{sdyw$PE8N4yZUrM>wiU&kwaB6N0GEhj?TT|1=YFLKd&Gu$ z5_{xq8R%4(=&YOBpO$uK{%9pUZ$kmNP9B1}7W*;VX;&<;KIR;sP!{g?Ypm^vcNlBE z$?`4O@!S@73SnNHI1P=Y{iHZTowt~XxHga-A1GnX0fwAN-GC4Rku#+hBp{(bg%O)y zPPT)1Ysy7m58|B~3$eRgWcOgIrUDHE>}(&InuZEpJolcpd^M!P>XvDQYtnb1TZnF1 zbhoyxc;9PsCXM=Eq$Ro1G);`@ZznQ!6x+{mbokJyr<|9#-7*g3g}}W>Xm{(5e>cye z>MJHR@Xh@uh=9=naXTVXGDPV2lUo0~psBdSX=>`)AWa=prCR8RL1zQffVSear6a^| zxwdltlKr0Kb@aJrvBPM%gjqi@fKk>LPe>Yyb&G64gPEE|xYAtDEAMUr+aavi$I6N# z?DHfJqQrmUtAbVN{~yxc0xIgZeHXQm66sJ%y1QEu#2};_BqSt-1l`~A?(rs(KUbIU>r1_S)FV3*o)k; zgHO{*u0m}2fqlx>A>cX_(?D&1gRpVZMeeI9njF`oH4t`$2{xuWc)X@fhnE#4C|ELc zXrLRqL|wb_$FRxfV{5SdX$f%6 zLD(WPauykdB#xT+Rx{Fm=N}7m5X6C6Pao4Eq4D3W zBc%vIAyBP+*7*QHkYj5>rkbXohg*`)w{WmPUHA)_ zQreF_gQiJa#_C0;5xjYR<%vL;Ib3;jtJLcZz&RA%=1B9PtBAtdxt$c~*W|aVsn{UE zsa_n zSv-dNIS=VfUh1_sY1$7`EC&v!s=otH`R_sn8)OI>p4lr|)K;+gex*FlIpb@U9}=3| zf%GAxv(39a0lZ|k@LICew4Mb74swOrW~eK4hAXLP&;qxMbX50fq)Py=@mAWW8cw|; zzZnf3&d=JiO3K5sh3L@F=Nx9eOQ|00lHWu zFa=UWUVYGtXUqOxZ^MAZ`9f4kjsNSL-+m_#5DXJhQvZj9Ajvfqq?*SS^vwg`t{5=( zdkOF^kebcpsFbcd?es_TrIO*umH8w5ChhFM_nN$J-%Y#+7ycY?z#yqk!a3ZdJ}Pzg4+_?% zU%J-6iwih;JLWbsVA-BjAOv6ofDkkhlk0YuZ4m7(IS}|1waRj6419OA?=)GM-Q+&r z-Oop-lsnvTGn=}f^#cmjzi%j5!s zJ)9g)N=q%~Aj}*GpeNG*B_4K6vd8Ombphu)=-Ha9znuFu_}Iv+a3EH(1h7cp z_|e+3y#Df*SF3+R(iC49WpN!KfRvNozupbbdvGj(^lVN2^gpTk3d^U+cxexiDP7T4 z%X|NE2*Pf@l#VdbLdlEgU-HLn=D!#~zQ{dy*lINiz)j^JIAW?1YgfXRj}Sl-1620o zAfNg*GGr%6W-;|S&~A3@BYkCnJK(n(jVB=G1b?eu0I*A!Df2+k-5;@~Fc4(k2s>;% zz0fCl%u^5WgY%1xH`8~@J#*)=x(6PbnMyDHu`5hbzB$s3$^o%q0pS>NE`x<~PH%*U zOP&;)5zPw)2s@5}a1{29GN|y1a)8?h4yN|Ahv|?J7v`Jn83#d8!1M9noHg`eLIGLS zAW9~KzzmrK0GI~A8vsr=3pf=zPLuDI04l4k1(5?K>&hQMfD%a%0*uI~YNMZmnoT<+;R?7}AbrB0T3H|m)RKT9(RY0cu~BeDb(sZ5O`3Dp&VWz$slv+@ z3S?=>%UFJ;ka_)^4_X%X_QtZ-$;#(i+w!3CWEWbX*{M0cpWW{pkrNpSd}ruA_WX!@ zN*iD5#9K9hCjUETq)1uj2+;4?HMIVscw0mNWngvl9bgt9_t<0hkffZ@tw4xxsoN^Ata`9lV~lS)CH(_51Xg=c(nG37L*uc#x2!TVT(vEf^=88$qO<*{L<8}I$HtA)X_`g024@k~?EL)s$1?MXJ7Y)rnAMy6(pJ%=ZU^nZ zbBVF#y?~z}Yp;49Cr1mgOIi1t)k~K8TNM=p9}HyH!~OqbkcS-XWkuEirq6FHlgMZ} zVS*Pg@R=T|%zGkD$PHHlUh}$5m=@_}=zB zLi9uU2|{^V2{?mVi_;WuoF#*jFhfjf5CQsHn6R>1`7m&5wj;_xsvRrtbw3@8Kk`hNT0yF8b~H{fkey!HhqnFDj$A@k0w2heA;nr$v<3{$u3ue z(F&V%+OYi$lD4*4U5GVWlMw;`I@I?S9z9fz9w~b4p$BAxkDB>FF`%3g5^nCVzs{bw z>xzl*XW|ZW!221iknGPFuaRb3fW8r!5oWxLC1+fARb_qhEY73J^VX-T-7#(OAWE`b zd1FjnBgK>^$DPohT*E*X$p#eanelO~WmdnewghM?$gwhic#N#f&)dNH^0lJGZ5mE0 z9xbg`yd}g-p!ej}JUG|3iKEN~qh@a9h65i;@+1n_M_|MWP`*P6+TK4O;%Qh8N0eLo z#4>)#-gmKkmjI+~l~v6c{tQU;hFV;Y4sQ1q^g1Ad_)W?ADU%4mu^i5?`NifWQTH z$pO`>|AfeBxAbey(6ICxUnUJf@;31)EWm9Fem(r}pSPYK8p)+}6=x{y6lEw_jvU8} z$BAimO|ddmFEg~IBor4tEtphuTgW>r-Tj_evTru|?dQz(tfK||b>%3-4ucHTb=1^2 zvK28HP7%#sXcF7{z31k}{15f@OW*J3V<2(P*0C7(+rud5x&EJ59KN=VHoy@m`uHo` z&v%0qudGI1ssW_25#3>D+U7lo57}X8OAvP4egzh&oy@1gFVleWQJ@|QA=GNg4&wcg*OMvgkPXMcRAv5tFXPdd)1JCQAZ+^@iyRsv1fHmzc7 z4tQxm+z(V(4!?fWo0;y%+6Rs+bih^H)5k>_g#XU(%rYP+gZ~)I>JSMI4qj>cco)f+SUYNe&W>?Pg{D5VAWe(&pW`*8(UJB6>#d}! zC(_USrN>KdA| z5)Hda0b)?VA!Gki6N|wwEIoL8*Nb8PdOgtxFz9;0XoVf=wd{7XHDQCRka(2u`cOF9~fCi2wI_&-}9l|^9cL5Hkp4x2w=TcYEAOy&@?al5|!mo9q+l#;QHm7v@KyKtfl z(jxAUEf?sPB$kj>$^XkP>7PJBDCD0d@ShYxKzr>2p8x;1A^rbY{*YO*aKIE_carNU zW3Tw%DX~|lmygbz6}z>xcU&AlUJY2zN3ZNu>fcj5FvX6p`_K#2U~%QSjm4|AuV2`d z`+3e>7yMV|sG1)lKk93FBrUADMi|D|7`)mH1N1^sbHe2>v zWV39wm)RkBgi~QLJ+Ko=l6XY8EBXbcw#VNg8DgSciV!9r%chwL=M)8M66D&*PcF2~ zLpZ&WSHfpE6G|}xNCD-Pm*j%1QM-ZPhkSHiY(+m#T9lo2k{p{>lwdBkx;nhseKh^4 zJb{djjYFhoXQ=CBJ_4P*m^c5aJcK`mFI2~zbvLC@l$-f%Q})@`PC;q`1q|sEu(Y_4 z+Vm*0WwO#Hc>mT(1@WoR#&K;pYdd?3!!na7WlK z!yhf7K2n_c_f`HTN{mjx_sywq<=*!w0wF3P`7cxxYdj@p(6f0(CT^zQM<^;>IhlRv zadjR1S^W7N>a}6~IWM-=C?Cp7-F`~;hir&^FWTxp3N~50PA`#3%WKK9ra~X;zMSzhs;_&*g7TKlf6mpy z3U5BckKW8@B0Iv=bag$-b#m+}Q~jBBM4dT|2%7_(V9v2Ks%gE;L4pMv()#O!M*Jn**!4!1=yA}{;{yhTQFCLlC zh80=db;lZuX|yC|+0-K62{8)|WRaxcJ}pl({}Jrl^N~7^Y}G8~k%b4o`1KFSYa@XY z!>}Js>6)8}brCLbLxeCJ3K*sGtZE0ZBr4#c{u|=}Mg`w#Ufn;-^Wqscy^1~Thw8@L ziU05?Beb|0p_tDeX8yv4D`;CK`ikJgd3o?n2Y$(%gaHxj=E@Pw1a3whb!m9NDd9h7 zI}l66Pvh*d;B6&ZQ{$@acBPfA2d3nts%(AxGM+RqNS1#Y~U#0^4rP8$y|iC)+-M zG_NJaOHId<>o+(bwC7bTtg5HaP*NT;M(*(Cx%H2f9kqtFh_3U)#^v0Gx-FhBACkzi zc!fhigoVn#c@(#9;T~w$nk_22lWFTFRMBp7KaOEY3eCtS9B#P%6aeA>+(I}^^KHEq zt=yAdSLEtWA8KFIqj0SGw$vJIzW^EzMdE|ac^FZ9G*Da zjrmgSMs4zcV9-K+*c&_g9zD5_qG7m?Je2z2-jm7yTxD-FUMm%@{P=LVkXeL}`4^?+ zC-KGgIX~>=yH=zJ;w4V{3G8F=6ha<;D@485gwzoJeLanSf&GE{NBN4?jVjPNHFue=2Rr44AhVDdyZlT6VkWZU&Qf0ja>>!}4a%<|qu$dzoWqNI(2Yb6EjjLLeO}P;q3w zxS4dv7i7wD-@S3U%X}yJu_o^w3~J5+?;YzWPd+{23ehu4Tcd=9ku2L4lJxa_Ri&QW z#w(<^=_8d(>(G6w$gda)CBF|QjM7ag#BWvVV3!x}H3PD8j;f9bSw!FQ@zIq>M|?I# zN8FZjW{&5eYqCBMkE^AKvd|dAj^)*_%iQ$=rcKA#xRv&{(eKJ{cqVr<8{htt9?AHr zslV(jtMq&Gdo)xsutg><0!I>!%J-k&1VthAdfyK|W-UQMT$GGICXYBf$xeg7Dej>S zw6XWRB#W`y#01Y!ab(c@aidX93WG1BG41((-{8;RcyIrI_>$t&og2eOM4UG?W$#EF zAAG1G88pS{9bimxA?tD2&5)s4%HgVy{?BJM>mzeAvnVx;VxN*T(l=4zM{qF0Aa^aBGB!{vLFo#+FZJVCyTL-g0^2~|Y}aiLyT59`$WXRI9&0K|?v!z7w8vQz4Q(OKvf8gi%DBnM{Bv%lj7&Fv8DwaW zvuC)Lu9+N-S)~qo$X)p~CN!ojb9$WG!n(kB3V!GQh;Ws!UOMdUpTCBr0LpemB}4ZB zxlP~8>DD#Zb-V>Fsg#i-kE-Hg;$ClP1km$MFlDSYg99HbrNd`eNH-oV zhE~z2IyUHWROZ9S#^RHRAXlqllcP+Ln@$~vgZ4R=8g_qNN7snohx5Cs$2>S1B{LeXyzlHbz^Gi}bPoHautFh}Z?&5-{V{S*maAS^F>RuM{$&<}N{apa zQ@61qgA8!a*DlmAn>-&p5*~5b{N1htIa`gd^uq~@*H?%$bc>0J!>>uw;0rhqx}XoG zgh9Xky}Pgiq$sH{d_lN;0`lo-z!RCDGN`ngA~UFb7B0NSSPON!_NXPCEWOI#b(+r8 zTS|-X zQGGg190!P=@r_r@;={Fw?usmCU!1U@Oj9v)d2-&aOE^LxE=k0hZmpEdWXi_VN+Pxu z?s-{Uy<8xnbr1j}luU2=gzW-Q&RsQYuvWL+&~+%{)x8vAymflO zM(nos!{K|jA6L1c$pX*QES(Y+H}XH5On%2Dw9#`(Wh0~B=M1>IYPjf+8P_oa2aM!?7LYktUnR2?R%;bVQ%RbQ)|3k^ z?YH)mg5Yh_8bj0P?QTc#X;>`WYTC_RNvOcyv=l^G)-dGIkyS=WoY6waexz6kUE4I2 zw>D6=KU}9gJj$HVRrTzbE>9uGx0Y?`uJ4f@$FFhKS8eTCP=G@X^`^@v ziOQMmL>zQw>9%6`fBC<;$5ry*2fSvDlb&j)ZUEJJ#w|B)e>g?68MT;!yzg0rIJ^q_ za(!MlQLy`XcYe@a6^&{uV5(2rx`CAUdt;ooLio}DToKX=GTZxnu*HmP9Cr=fPQ)jt zqkK)d28feeKOyS(=YaY1da~Dm$3gqeRACSo!)RLUlV%^3q^5ZZhmE4>JGHg2deL&Z9_jR_d0dv)(qYI_nnSUtHaHI#4jz5`Yu-RAET*SjkPum8zG-;EB&5 ziDkIx;meEi=Yxim%G2liBbUsN1;SP*r>Qc*GSJ49nQRjBUG_R(n<4+8y+b{G@7-%R z2LT%Y6hh|H)5Ye*gvd9I2(flc{uyEeZCv(u$N=#!___SHP98A z`Y8gZC3drN#t^A2-mBYYw^0xkJuUh&M;P`Z;*k+$c$u9Znj+=fiL^ly#B%~ICOm2l zQ)=<$OR96MPF@MHZ{cHf|B#6&9(3q*+|qFPg#CnZ|FY>*u_BF3yD+mB<dNa6Q?SL&D${HO-RE6W6dnn39$)E|y2V^Mr^Q#>uTMoh*-KpX8I;~VplqGw zF;%S)%gMibH?KX-hma~ZoILC)Om;62^L+pFr)p>LQ3AH2yP#)%&+FadtIm3an|sto zP3-FtuEmM!gGc=Ij{UFbw&Imj*2`-fu09+Z+bB43MjX{1@`OuVpK9HZQTe_^MMzpV zEY1~I9AP2eUb+{kpL|R(_4)fQkj~H82(m?nEjO(`TQZ^KXM+BFanvsJEZm*5h#I2} zFZqjBw#o@8HCZ@zXLp!18ihin*dEE2CaZl~0r_Tukm6CU*^E^E{K?tQuFQcoH4Opm ztH>4}jGnu-y|&sYu-CMQBXf!iV<4P0#{h+3h_0!}O>Nm(P}sFVAeyk8Db=NN=WU(# zo|#$5S(-5QddKykc&X401SihdC{V|JPlW!;FfC2Q4@c-D;o^8i;{aH# zzFx&&biImVP@lz=ex}fvRc+A%3^K!Oug!kg4GU#%zaA;AEC|VFoMUqy;h&Q;_OFGV zP(ELaX`D;gQM@~Y9TZ<>>X}SfaJCqudSo+kKroqVTD+rJrwvJU5uozTGG)ZzuD0`W zo|~}mzl}=?`@s{IE*n z8L7v?#E-3I?BaA5JD>QmR<5pppqFnlb-c+xb~q+6lj`~!EfPOgJ+M()R@{DnGj-6h z{kj>lcxsz?$X10(C1vyiY`STT-xc}?@dcm}gR$nbMCVy&ip2&$sxJz?_ylG+pPd~^ z1|~M?v@q+dUEEh!DG^SlAE4Yl>skwl+MY*lkHRk{Fk}2E4S3b)v2XWl4CHI`Eq!fR+2t?urJNJ^8mpcdd9dy=0 zemHlx6HlAecsKp*_3WFAoS{YR=q2&Ogje zkn62`2r0&OuNtd*o%Tbsmmxwo*knR^We*Bs*AY`lcHP9URKCaUO1!hDJuD{k4GR6Z z0hHEmh&}S@mtVOc)4P?^?l^0w2jhAcS@XKvyKOeku<|E%!n{q zzH;y+R9Y*8j|J{@PY9xZj|5NCa}&{EnlhTz7%H?*X7BNhea;!Pb31`QPE$eb{krbj zsr&UIal$38Xfn0?G3!^c^86d7xqMFZE>qZB9O&UQ6`ogodF--Fa{_aw5wG3X1nb!$h+Vjxks!X9EO8BirliG39X1?2 zZWNhEETs`Ebx7h|d-2Mx-*nGQ^EgrY?zf7C-*_gtKZmy;Y_V{t_e;+-%INCPK@qb# zXUu3vkqHTheiyZ$s!RpfbR$=?Clw|mo?I8>I_)l9rEuB%BVufg8VsS;m6?yjsrrv5 zbId(=!TGW@9ZY-=vp@aC)&C$oO2mXr;^u&$yp_BaRJ&>MQ)4$^g&usJc7S){xqdMz zg3(@!P8H8;Tvpl=5QFd42=lZl4D=a2Ej1mi$aM}BG2qL~5-FJcKp^;dZlYlpF3990 zc%KY2JV;wQiAi6m;>YaQZ-u2Sg(2i>(@?Nk#v2Jc?88T}1zBMY>lE8{==S+v)uR(k z`WuXE5D#p``z{7@_|^IR zv#|!#rx4jYizUDl^fRUMt1muTEBoMP>=)JNWL{aaImdIBAU>C}{3kf`{LX4(`bg zRveLW`e4fA#}3zcJ>laKZxW+}Oim`2l^ z>nkT*41tlpc>_+bq0poNP~J^X1`M<7){IgiXN1j!2;D244`exY83x zdc_`Xi{aCKnmoH#Or5Io`%?$|MiG-okDF!ChE5}gWsId}F6c8AoYIxggAz!@OhVaI za7zgZMW~b@?6=4WfngC(&F!WHp;9I*7Ue^lt^S$;auYM#IvS4E zsOg;A4NhTJEm(QpH1zBR-ZCFg3K7@+!Q%u9)^!lAx%g~Ms>ehauB;U<$HkqyLW5$9 zNzSu`?yyf!OAlhyb7msz-4O*REqA{c1wIWkBS=g@HnN~qT)p&U-kQ`lmakDAr?$_+ zwteu?$ZfT%ceSb?Ps-vOj<+^$%ig5Mtx|_c?$V1ZM7>x$W@HmoVGsXt>*k*O>=DVh zf2V0*(S?*rmC%=?Ge7B&9dRM(Z<^qWb~;&x#DsxV1S~ny-6hC=8}XsmE)7o$Zuft@&U(P0ukA2-&{4 z=SLaNqIL~(6GFZ>koXSi&*+0 zMx%sYkv?b{zrTFZK;ZZ-YV53V0u(|r6^(pL~BQg84KwQ&Iw7qL1643@~G4`=A z3zkmK53)Je--4x5mePuY#Dksj({LsCxXwCfoHoqcnJW{4yFUM_af%JXt(@X;$% z$@_D4x8AG&>CN>>-2pExd%xCvIFH16_&A|nY!tNI^h^WMUtQg|?&k`|wQ7b+Mme6V z{&Gk%v>?$T#!0gsK5XiFPBgCGu7;s_YAdm^hw|})kRsSLo+4T5+ays^{9N>!Y=vBL=Um1cZ$;>5Tc@H*OuaB{Us)npOxmDbBXQI9m9`#1p@1`u{Wda~Z-7<=*6vsP6<>KW-XA82^Se{^!8LZY zwE@Qu6;ok`8gq?Ot;ddoWSloywF?POzK~lIO%Ko!R~vdr#@S@8UZD5B(lant>PgCB zZ}uDoRXqC)KCnm|NKQ%2)NvLvZQc73a^|znjIr%)n-p|+wG~^UOnc8ys>JKj!ucyy za8@3WIfr{qTqyNXCT1oU?w$9zvIf-Q`1vi(O1(ff8^(ArBIDnKUe;rI+7@%J7vwe( zx73`SH-61|z-s5;Fy&c1>`BZzil$~1Xfl8p4`<5p4A$@0br|33FivQlj)mzQTOAb= z)0Os-Lpqg>{YCtPopVLd$Ulb|y<8+5e?W~9_WP=80~al1x{L0zQ7vD?I;6TP7$@%c z$;G19BJ7F_vP9dij-hzVcskbtl=2yMX>~a^3a7bxiko$zbeB6f$%h@lH8Y;46UtGq7;S)yvs_ME)cF-{4^$SzJ`u#`0h<@j;oz_}Jx#p6DDShM~+obRicU)S-fYd!U4%VoEXGnhtIp5I2b3F;_oEJ~r?~l- zdhA85{bh7~!@}%I_)QNT+E7)n2F@p%A?%}pP18gJiOwXI@iY3Z26eFh-bw6A{Jyc= zI1qe%uQNp|rLVhep(pkj;YM&!#JM$4yO&d=_UgEsEJz$|@Ayyx82uIsg`1QUj{3*Z zDnO7ObL)GaD6S;2G1w%HH_at?6oZ>2!MJmNbf^zqUHyefpOBb|ovAe~BxD@np_O>~ zz=o{o!#7kDwJB80LIQ1luvZu46mm49A`uk#A7Q`l9bYWoCmWJ@K=Cf<%=REg)LSuB zdWA@m_hGDs%e%Fjo|BjhoHUcPdz8sywo{@f$HQv-skYp1$FXks9=Ek(;)LlqZT?iNiwFHyr8+MWeCMp|LUx2OxxXr-X2YnU+yF6nK4FyPRRDWeSi;RB z8#vPnA?N!LUGKH(Vn5S5hYj5+UeDe3YIDugdUHiBW4u@l8-`|R9+}LkV=2^!i1%ZQ zc3C^`PQ9;87d!&Z6r#p4bX-ON0G&QEXP|0Rq!1* z27#eab$w{eEM7iAdYwno*;2?2AJ}5y@DUC)xx9kRiQaPJZw&p@KZw#62;QH>^t#Bb zWOU_O1mj?#9*H8_kNap;y`>3t^q2R-a5ZcvaPr40b`{q^v$p$s(xcxyzRBvB3$Q&$pNqUU&0;gd>0Pwt+>sDLYzj>!@?Zwxx`@YzxJD;DSY!+^K?S6*Qf(M7MV1j^-CO2 zjjO_rs_OTHGVXo(URA9aB-j#%fo;hT76tp0#iogH0@I#7pg!DP?4&qqcy8P~Y`->P zB=Zm!&x(~{)R)pwqsfuYp89eRz68fKz%=J$Y=*14rV0Q(oUR>9GVp~4;~9PkvZ#_ ziXg^S16kCrk28&>hQ7y>g0fl=eI z`JpoGqZ@4VE?H=MQ1jp|BEQ=#Bk~d_WxoP4s*=TRx?NOSllfH&Avx5lBEMMm?0jf&fz(Gu6Z*nYi0n6kDC;r*fp z)bXW|*I30h;urm!WQHOPS;yax!x&<#*?ha$X1p$~r+Bq>FyNh- zK89UAqq%+4HjPFha#A^qMdq?a`yun#pe=F5P>d7GC_rcm;=5ANgv(e5?+98F3ubQS;ty=qFx&Z2m(YVTM0_1#aMiegZuSK|tIBcZTP z$^8@9y(dg|CY0dF zV?cEBdgEbayVcq&->$}a=f?hxHIukeB`t%mkK_fHZ~Jt;v0aXW3g*yWrlU5m12fqQ zzxbwYSh2cyJvc;pvtkza#^9o*CCK`lCCAr*)mp zzF`m7ebRgd+~Nu06!#hPqTyS!S-vKy2-q>PVFNl5OMO_893`ckzMXzb>amp+|8t%VPT zo29WO4dc?Dr!&YOpUvMO8Z!)AJG$!}kajpfn)LtaJTjnJ+7O9fzd@KQ5sVa4%Pk`vsu*mK;*qB8hx}r?1a$pDq(cGsfAlE3Q)`yt)dXoNtjPuFiv)bZ?y-HvZ zm10+j!;o(3W3R<2b0C_!ZODt9t5k2_TvEDA5Yg`ma-pT(l)T~K`v$$a(0Ye=$B-t{ z`Z(j0g{R9;^42{e>b~ZVlW!!dI+ZOGr<2O^a$z&?Lx1aYZfVMLCV!^n_zb2b*^B z41YRZMVbZ*=DNeuGl`rm#vulg4=m?Zs<~|vaKU1kJene=*5`NRGY^C9YMEJC2bf(V zGn*W*PPccq#3GZc?tGvBNVSw|%Xd9xv7MMpNi4mx79|;PR2t@=Bll4Y4fmmB4t{#I z^N&us8A-IgWl({df~*`1;#(l`KJ(pLyhEBxf#Dmb7LYTj3K!RCiyBZ|BR&U(*pYzz zaVlrTf)7pX9BPQ=pJR^;6o()RS#JsNow8%iMUX7NcCHC4> zJ6X>;Z6!NtxTbb2f5G7-s7JmJ?9R#ZSb5MS8AJL96~)f0?2*fj=f^& z6P29{2mN3Y)*%LWaEU~bfc&qqfGrKTDm`xft1Welk!0Hc`=Dn>M%xI9TPfn{&W&ZP zq$xXA03?~qV8FVZ<7PLON5B;>^f9K^kNuuamWGX<=ZPvQ zsb6gctQ%^0L$TJAq7ZMKgwcj`?b6~KZTJa?8eOt&BwIO8`GHIT^_;r^>pK0R41Re86I4~uKkg`$&A;T1JHX}nKV72qy`%vboq>6@mSls zm`gT_UI7kQD>WQtCaqSP%B`%-EK1Fi-FZ+zx3tA5JRIU7t{2f<(=))5=*AFp9!yRIwWOiLtPAne=lf@`qQvf#y z?XCf;1+Uoqy{heq3hxc^3E-M3U2@6!{?M3I-)Zvaw+w<0LC>cvVai|+SK4RU_gT!378IN-uFEGv2B$n zt#V0aEqspFr(e|6k%C*!W7syCv5h`k2Qw3n{`yrjwa&2h4LHZv@t&n&4HvUz=5rL0 zZ?Y5;1)TB-*L)Cop`$>(ZazRH8Au}RxMMtflLoJYPgyu|CE=XW+N2G3Gcc5Lno0=u zT1yYFoX92YR3socGh)WdO`+}gwV&XDIT1##4ae0S!cyXqUBssI(?ND|J&@r`nqTfb zs7IPF9jO>1Z-?4>IMhi|Ii8gw7r(MACmH$mS^yX;eE8z0iOOCGY1_E) z2}u;1)=tev?|yi1by>u@qB!;$D%H|~Ge`A=9?Ui^aHgrMt$#U!MCv>BFiq|@W zv8A~FfWVUeJ53t1R`se7ZaG&oS|+l^$a2Z5W|K~jg`k|lrUccejlxx=z)%38PTt%2 zlM&@PiXnn(u$}GDp4i-6!{FQV3XR>MWPN*Ysd?{D*$j9$woim*&s0lXJO}l!4c(uf zy7#<&Vn3usKwO<|h{7Q)BW*EC9$(;f+09_`n}goXJ%s^dyc zrqHB=Usi2xOe;UACyi6kDifTr^jM9F7V@=tJgDJSkFco;U%izmQpFBA!r=;>c;5Ep zPQ4FTFlTpS*b`q)+95eKDy7YNjx#c+&ZHZoN@|fR`pEB3uOi&(l5uIj^Xb0q^B$HL z8nxbzs)HY=4srMqs{t_#YCA7|j*aK81>a%j`+&iR6f2&|E=^BquN1^I(5R#^kc}K6 zIgZCAO8gT7OGb7jBsXf7Vp70|dxhbgKbJNC5+>fHPh?K#<#}(1` zV2?@TfyVrb>ha?3@zuEP<_hzV3(IQz#dugCi$ z21roFl6eUssIS%2A#aV-vz`wPwU-?;vnZFTvHjWFe7XRrytuphcha`} zrIPF^0kH2%{b5)DHNT+-iOw<;EjN3${?c_UBpX#!apUcNbNh=n`U4FRF%hymT?(My zqmf~SX)_*be8?c*s!Nxku;ZR_xZtJj5!ghSAdzIxlgnM!zU+S{@5`-Xe)Nr9qVm`-?~3Zrl`s^LwlGdy8ullu39_??XdwSzbqOJ9(E^k%Bx4{ z*U_?`%wxaSUrLRFO@*MpU#y?CaAlHa*pl|0%dRaj=UP539^nk*R~U>lQh)JQ*653~ z(0aaBc?C9oV1_4!#|G8KJ6QtXmw1k{g8pa&eImvV7gR5NRe!bx5KMpg%@{~;`12fP zJq5P=szo|DVD;bW4O`kpY85(xnDmz{u5M;!G>Yeu6l&qhFWcx8wG9&e(DKGs?%Z9)ADa{~C%>**1%NGnT1;GvP@a`bGyg^c5K{ z;4N7vFEn_8Dy;bE*gyEB0+nPP?cuX~%Z7oFH>i>amnfJ!T#vY20xJd3+bNe`R~L?o zNdX(!Xw`C^Bh4Uj$WpqN{t<4ti{A6R2t00SK~SN(?0}K*Ylv6~)p?yMz1Qc{GC7t~ zPs=w^y#*bLoxY~U|Im(vjy=@!f6^6q2 z?)(H>puXoU(Z20-|6x)2NNa>(i@PcTUfq0IO)5qAMI3uRZOV%7F@)25^X8Mr6AaR} z+Ftg0-ik*o0@LzjctgHofuQ08_*nI`G=;s-8&TR-Ul;t}t-4I`p)M{W2ML4IcSl*U(egP8>PamxMjJXh;JDc~0hC@~^2K)f$C&fg)orlGAt$V) z<(;~fN%rwwss2Tmn2N-gM{PibNGX(J2P-$36$Ue1z3J8r{S@&URLr8&c4?0yKw2-OjnF{VDbYyD+i%e?VgjqFbFj!q$sE_awAIU z%!4Rb1CcCbzDo>0!n|L}bF*VCAvcIhnGj{NQ!bzQMNcOFGu<>|!agBklc_OLYxSvoWgwVzN_TK_we&waUSJ%1 znc-lYpFOevC9E)*#jX~j7hh%4y-S0ERmsfvx~%PXrE#|*l8~o?d)$UE&nfms{!ow5 zQ&0`y<}6(LWkvO2m#6LJoVX1W-SC=$Vm&}1>=C(qp0RQn^mBqfBlcFr~Pb#>-<@l9gjbIMKpDTTp0a2BCd^n8_I^qm)--K|e|A^@Zd zE-&fdV!fJ%U8y}xlQZ;lQLS*Gia4{UD5-D#o9WtQBHMM4bJ%*_wenJA<)sYslR(1*qG~LZj|+% zg1AyMZ~rnm-{;!}>POeyI_8@i|eZjSi?(w$12*&^U)$3{n8Wl6{()SiM!Y-~6EYlRDW1fA?xHPw0W$}qWbs0wnjOobaXfWmd=P|uU$rCw z9%P)~*#^lUad(%Z=TzX-_tmX+(OY%64Ro^m3H-&0_sxa_(+b7aX-h7C(G6hhg#ae@Pg~^o|K(oN^9}q{9Ut|_9KpDxbjHoW4@joKaC2?6t3s}Nk;G9cg3i_otQ7jV}49vuC@(|?oh|{1ztevH?Wk&%uVPLefVjVyr>J+ zfba}SoAk#b|B%F(7oW(p{;2ko07iki!a)3cp05xh+|=jMZ;D&W6UodAZKYLd{S&Q=l?nro7-Mhri9|AIbAcV(n(6%l#VYGRJp0MkLDAIXrwvL-^Hx2)Y#3e#;2Efzd~CKK#c$<+Y`{n1pa=aO_RZ7wqgd%YtQ*B z6F{nPT3T;m^2Gtfg!jI-c`$>tyJAX#7{MXdG~oK628$F~w%chRyTa-bJLAtzZ;Cd2 zmT(0k2plaH{})kT85ZUDb!~tkIY>%}3P_3600II-sH7kvB@L3}kkSo9i%8dqf)dgl zk|Q;QNar9WE#2=KfB)xtKX~!kGw0rC?X}lhdv(O1af^#N+5(r+K4^SW`r19mVt2NUsrG`RYLYO0{*{z~m$3V8zbM{oma8aCO z45uD!bYiWt1>y@^1?7`#>~({?oIf0@ryZ;RYmK?+CKxUFouxdbkA@#ve4IfYwLYr& zl~zB=Xpf0qTP)v~M|^Lre=d_rZ1S5um1Z+VcE5RjE+yfFI|0L(IUC`A zohAzDj5OXmUT!0wypZAwVV8vXP6eT5w(9$l)>Ny)^Va>1nPZ55%5sPt6$cdsP6_2@ zbT3Kf2l7S1JCyvlnVC!vuFWVqcopA)cf~S?kYCHSa_}B=^LQ{h;?s28Ne05^adxdz zs!_dhb>>6Rgh3ZysyWdUSwnTOcw!V7O!aJ4ao7Wo0eSm7=rrmC$9)OXN&O8p7J^J8 zrd-gC5snw&k^r!{+`Qz4S>X*dE8-(VP?Y|=TOdu_dO4~@;ThAd1v+;Iv&J7}%NDK} z9U15=?lS6U0YRtNmL%|;Xo5AU5D~XDof}byQ%gmYh5l|pQXDGHl(P3;&ZVsnSs(&+ z<9@JnX?jNist}j$WsX>szIk^t=(^MYz*g(j0&|@ zzl&_KcbsK?%3CwtA_BZGExuijo^3z0*8-WQsxN;TK1j?rZ}n8gyPn`zBIu^A z)oOOHxlcYaGG8#l`AUm9*K0Xbf~3BR*|P~l&pwfvnLBXOVxa))pE$(DMlesf!|o{k zX+Rio5~rtE4vD6s#C{PlTo?!A;Su27kTGnF=n4Xo1G{Q=#1tcgs2jzEv$o-OpHngc zi*LJeJ+trc_%V3rR8)OxhbUogbLzvpZz}5{t8;9(m#>A`Bgw*>R%zPiZ^$vy$9oL; z!grqYyu9%ZSi7iZKGH8ldN_Y!eHlFct`^bk64hwPxvt$#ZC_d%}z&TA*Z~G@#j)Pw`Ftx zf#V)R**ji;mi0+;mgIL?vpUZ%sMltMIExetZLRLbN)4$zg`XVxss;WB{C@jfW%0IG zOD(N_8m#Oo6^o`o#oX*S%UVBeZ>X|GbSDS57F7N|geqp_IjYp1%ocoWV0_!({Rk|@ z(fM_0_Q$VS`f(o;Uj*vk%K8Nh(rr9Vs5#*xwlvmQIj28|u*y&Q3RyKREkQ)J?+ag3 zcg{ew90LmLC1Jss^ddZ_j#=hAk?kuMj;L~Jc0sst?JV4CuW^ShpA#tne0`&GZ{c8b%4m!O`9+awhwVw z8c!_HO{t#sMf3lG?gUfX`(@U}Md+zNY8aA3;c)Z*KJURCqQ19zLNrM;FlNhX-6i=8 zB*m5cbD@&0yBE z-yAK_Z06S3*yHtye(J*_HTBm^Psp>GZ+@=@ULLOFo9@f7<^;hyKQTZ57#%mnBZ$&@X@cViDk)0Y{nhbs;Aw_+OkVRT^xvPDCtY_78@G z%{{um2e>f=o1>c-&Cv#vjg1{$0K|Oth7S_E8NyY9q5y>25d0m~A5^o$^%Xd;;O6h( zKbm}R?y^&io^Q5h4m@s{s)eW0A`?OXxI-)%ib}V-F-D0j33if%rs=U>lfA7P z`nGveY)Mwv`IY96OOrOJ*L*3`kwqq_j-P6+^UiBtMOF(@&deILv=id8vP-~P^Zp7Q%r)KYI6 zMnYE1sq@^j4O8u=7t*Z0H8H-Hc5CnP_xZN&zeSTX+XqB!!LNSN`8+MDO6Xfdznq{P zeOKiW+r8=TLZluy1B`RPY2fCflV{hg)5r5-(&V$JD2MAN!bO-4Po7S=aVUG-szc6`t5#g!1u(2q0>?4f9s; z4{+iH!!+j?aE#2!*aE&EQ)?{@d)3jzUBG`$(6NJ`rz?V~gQ-R66lbA%`o~bZI_bmv zi6(6Zv0S&Fqn+TJBbHADMB`chA+#%=&UUb^WC#wRDMX40(Yo{|7N8;qR9p_weOGkB)bsZdhA;Ic1iUG)_)S>tnS%DK##CY!yrr?%AR$a$$|^b^)*~LOK-_>A!?qJcGqXlJ%sK zPLXZ<@~{0|2zUL7beY|H-<#QlQxC5<1Y!fco7r7L zs9Wch;Xm2laS;*iQhf}UW0!juu7!L-RYXMbc6Z19RRpukPM}u&0HA{hN#cn z*8hH|ZNKS2aIcd!M4l*Imh11Wwa3~wS;F6GMml+Ham`Tb%Na5%_@w^T`b~RHa}GE> ziu6=1XqF|_1SWSz{r*$iI9Sq5|`ajKe`M@5y3i=RRBu5mRGMXunvG-^*9d(#}y zw+mc@_JI4HI5z(?+)C|9kstAu!wRxu|0vRtr!1B9zMq{vEE$)95c>bM;gHv9Udh=%3XVOyxJls-~W1k9GE3#u?Ws`Q^)gp_Dv-9)V+|xfxJV__cm-;Q|dZ~`W7$N zV7lNcoP3*x&)AGOj0$qD;exYgyofo(Dbi8mF~Vh+3yii^$ugU7$`Q-_2EX$Tk;r!) z&#K6XmW&vwdV@}-r>ze+fYsRQboXT(&IV#6%@ivo`rMxm%9>)?40O2l)G0wWOEh=q zy!V6TBM;vnRt?}8zg@FhkdSwg#j|Gg1-N%@=+mfX6LBPF5xFK3jzCLLnEXzayI)32 zM*F^!$bIf8#z=xzy-M3V&Znhb@OhgL&HdcrTv;RQ46=ev$-Ne1#C%=qR!dNSZIet? z#MHryTeS;u?Lw)_*mQG@9xHhG|C!S1@umcYQP!V4^eD<2P*W2V^@oL7N)(RwxY-l; zRvdx6+dA@Dp|jK1O(J9qmEAYsapDeSKy`pcb)=-FmChWJ5DU?!zeuKfQ_=uGAep0{ zsA}8^oeu5z!>3<1#_X3GUXJt`{-HS%zoe6~pu8Z33|zuu;uXu!<=k^4)>}G8KRrvj zPk_IxogQ>e_9{UKAVN1rqokJPJ6SZ7qn2OT>3kxL;kR1d?oVXowO0ZjJ-o)U%5w_2;cK|rBe z18)R{^zh2rMfg#=6Z;{RcDxiJ=~>aUMJb_Ap&vg7?1<-|Q8@iV^RrJBk-e|z`rT+_ zbuZe%`o2KK5nZ|g+gF{VX=`q^FRc1Cm@41oKla#Z?NbvEmt2byskDhvsZ(& ze>GveB_}NYpG6-fn|*nmr_GNV8<+D#e)#pF7G*pgO``1VJ*yPj6>be-yx1d~00(u&Y*>r-~b$aty@v;3S{ly45 z-|*W({gg7qSFu%-PSqx-vJGhQ8nYK)&E?t`X!`;kc`%423cUB7zK%kd^GMg?a^T%6 zBbG)5D_@L&DbUNDG!Mq5rqC4!4KNpFs;@B#ntNy2yO2ulnf)EP9um+m`@&V_r&7Ia zm#JFAaVw}6KJ*;~mv*8aSqFtD?jbQUqI{~~P*H}~S*d=}4DK^fDek$UuJoY3T;t6# z&I^-+%iWNazh^V|1GciFWmPEUev<;@GMIejyF*}Ha#~SjG#v1eh9=8MSCJ#)*!>8; zHwP@Q(&Q!G@#B?JYIwM;=8IXMe<`iwDW(&{5IO3aB+@^V-y%fTQ+WdUmz$CK&a3q} z$_Zy9UZc`hiK$kzeJ-TdtK0#)P(-dKo?DDC@<20282gUvgfa^cIt0NV-paFWIXb~8 z%$AW6jph*(C}<4t2PH?_^@?*TlF0N(aJ3@;L`gPn~ zOl34!tk@})kYJF6jhVn6GHP&h+1|Wi23Cs+46Nqpbq$@{KpFjE=;SZfol0u)x`M|u zRTh41xTR3cUBT{UsEvZz+;)VS zZ=QDCUa?RoO2Ev)`TMx=NXPd4kZ1py-MyVqwtp|E*iD!4WU5&-q3sMO{z9-r1h-=B{;KEDo;D5 zAJwulhxARQR0r(kiPf4iht-pFU!ts=3uprZeAUHO3WerUC@2I;2#pGxK~%SFe6jmW zTU-619mp*qH$a~hEr1;>Me*10*nM$v06pKD=*86(puGf8lN1(cf6!dArEiPuq~0q> zcyW27*TGV|>xjnOTUDeZHMcpfX(B#v_(`;;3y%j;;SXcT5y#AkZ~Bpe6a{aF{MXLr z(+3h&n?bRCA$C%l`5?`Md()bRvFWH@`7mWxociKW_iz~3;5j7GmyUph55Fg_j|{-U z&JRa9y%B(Ft^ePe!TxXJD1cnS4BU!<(RhvY3 zNugFaJ1cg*J>m=5l~J2%5o6kvg;+~@-o1rj(YKkr`enQibz;q+3Og$1`&@Whh3I(2 zGtGN3!tGaBmd3U&zE)pHh<*qa^ULB)d>U8VeV> zDX<~U_BV*Z6>@V4J2+T-a1{mgMeOES*rQ%@$3a;QkHWg+jk+zs+oa%i%6`!;Lj1Jad6 zXMYFY-nk3>nk4_bQvw<#XKRgq<(R+{8y=mQ^1$>!3%18_B6s|b``N25>GgqFUHLkm z@RxGV41ODx0M(#bS~kYaV{C^54a|ehm9hvr9Upv%7L+;vU{E+vWjD%i0BP7Qu5ZvS zfaAlE^R6L>v50VwJGzXYS6IMT>20q9s6`@vsdlp^QnLnUjWZBxVa`NVo|WmqgxlrN z|0U=eT+pa@EZvj%mbtS{{+0RIh{#(#3c}NB>yFivRiBt8!PB7R;NzdL2Bt)XYxc_+ zqorV-l^Ykbcf*-~5)L#3qGvuF9x z9gPd8e5QN$+Yq8#BlSB@eqF~RCerfbtUQFXV*fs$$eLJ#1#w^tyOe?xQFv|4uLbL0 zBk_v735eWz3?*q8LSujyyrIc5;Ohi^jSUkO&>{=nm8zTcwWxK|*xQ_zbm$#3kaW|# zigo|_dHmaXO>zxTH9E!qpc)k-2~&Y!%-`||ZvEb!+ONkz4${}6!kf9AVeF5EXxZqo z5^JM=k6ZYJU#(-c4N6}p0!Q$Y2F%y6@>U<>*#ckLDU9S&=>=SBT%K#+bzhs?21kW& zr>poL>c1S-XX3I=kUcZ@r*AC8C`XAmx7n?QeUVBDhNu$#hev)$wky;|U4k2?i)V)K z$%b{;t?{L%st(sdUUSD+csNB}Nb=c3ad*v|3i(-0Rgquyqyq+qDO~J8CU~%v7H^iQ z98&tsp2l2EPupG2;7R|c)nH_#16y3+D+qGtIO^A~xT;UoxAL|P;WcDeq?gMKmr+)H6fM=0eo1)NOZ_9`j4Hav$P`&$_RmTOC zHdVR9NOz(_ywx#?wPEgFhkjb@+7kyO>pgk|xLvu1$f^CC=G7Is?J?6Oc8?ri!o*;H z@$y8uKlqU$xQ?#nLVeZ9TH{SJgRV(3^6|F}D(NGW@|M#I>tD@1kmme_HOm)#+4Q?} zbvI&eQ_20N{=Y*KE(>FDQZd?TeB=72l9vZf%!Jf~acK^txJ3q^*6;)>Xoi8pCM*w; zr|YQ%Et*s@>D#U-MxlwxG@^5xm1pIzTD(Q{`XRJEODB(x;Bp3NbIA$5kngNi^$BFv z?;5_jq2ogd=TH$40-H_nEgIB28YOa&?y${*hjJsEPU_xxTF7oysRY*v(DknOCD3uo zt}ul5SRZ%4(Afr6pDsaD5YA4Gd4bU{<^kFH|@_^0hqRYW=ypK%jI*K^%!#W&Z-oA zFVpv)uuiP`v(hw_yU%{PbBr+TDx+=9`-iT%6tke@hu=c-cS}LJ)MOT-ESkS9#0rti zZ2NCqr&-Q^Weg`n0z>d$+y(GMHvm9|T6l@cJkvAxtI>KLei=y zw*v75v5^dOmKG-^pnp~}7$SB*>-JE|R^%4GHCf+c4d$}>ui0Y%hb7L)T8ZE~$fSe& z-bw0om9Dyw#otrZut&e#Djz6VAYDuwEn2g=l2lO=bsNx38eyG98##42Y9s>(~s9lE7X@>&-D5 zhZD97c8Cu_H~`|<3RWI0C{$7Cd)ay%6@*QrHP&0q_Lx6j2C#LGk;?Im^}bNE@SXFM zz0zw-oupqft{V1^1FF#U1?C39J$ z+uT4=(HcqmS|PW%N85_mn=Fg=`BV|WS38fsIk%+n|3MvH0qWR?*M}(|Q);u#Z7Ts=II&P1@Q;M69j@q;0zk7_W{<|l_0QPN@(mBI-bC97MP9KkjZmG>w> z9||+h{sH?eg}I{ReQK%z zF!5Fk8J$LsZktmttd(9028Q<>uQO8N=Jp-q`KS}18!I~c14t*1=nmNy!+`9*Et+%| zI-WD1NE!jb<)}xKig@f?NApgs_sGO7(&>yzoH2_J={F2$jcuy?FT0Juwr+RvY?*r*1#*i-wWhS+A02DTNJf~DDDa-tJmm$12~js6Hlne{$X) zG$-54znuMDBqWG^67(D4ZLuYjzY26G9T;&59Nfj_bAhBXh6KqR0CLz2gt}#j z;K97_agg-@Q}zR;GD823E2*>ym^n{bB#Kkqu_3lp5R*#y`pj!q>1B&m;bG&&rFG(1 z^3jj>qNNNgBxE6`kr)rjVQg#d%uUJ*9r4JTdtRB6=zHZ<=3HiY} zMO_tfu$JZ!&{#}bC-g})@Ud2VN7*2n4eCZQ&-FWLZ{3mR(P=v0p62#$o7XeVv}>k% z0@MGthAoE-1wjyqZ=4uwFG;TX97TEXmm<3A^nBXQ>u=YN z8Hr%f9@u=I?N?-E9sQ)eSiMHtZEK`2#;AB+);BSkSfAuO>PkEV{fl@bK<(J%{_oqu z)Z$ziNJkwH0{uGsl1+(TOu~GolVC(fWgVPMNAnE(kM?fIime zg?l<{oGr{qtL@(@{2&!mDVh8z=~99(P2?lXWyR@rHF3mt-`D5yBTCRm-+&Q-LxA8| zo~(2ZQs-Q@H&kBDEINk^+1UcLgI3{HH6H;a-HUodMuexhoNcpi{<%We$;-D;FY(Vo zim+!{23Xu9}0% z@3Kimw4Sm@^y-)BY=WJVMiqst>Q$X;rH(Q-dx(>$*^!2j^~^P|sWwJODm-qIrLz1q zCkO-hPf@TNDAAw$I#W=YR}2R4EI7no4NT#o z_@wp-IArbF4UgxYn%0M&74_s9)w}7?-MuCZGzpCxqP+KtxhbflKiHXW0f%R~nSr)C zGv?W-7dhIPE`1HxTw~wY`-)kO>dR{mm4`)N@Cv9)RGm$^O>Ve(?f?1$uf~yhkmJYy zkfE3}@f?stv$Uvd zqMAbBEXKyqt6$ff?)!&Tl0Ps|_?m~dilJ7v^v6NyEMy!qiK;nO_ba4ic9VvlCdNBw)`@1H?WOG(=8fYfkkBZUV&ni^jvkrjjR--3+ zB8rFRcO>gP8xRUhMv@BXhdl!&kzEwO#c*%ch6`K)&1>PFa)sFs7;m7j9$rC(tsRg0Q0qtZp0YQhBx{T3c_G1{I3xUE`Sy}Fa=?1-% zx=4br;2@GDF|m{Ala{aeFECN3rL4XOUr!}c8(T<+w;F>pfq3Ii#q1-VSd&FHbT4pQ zQs(dsaj+|g01SW+(3qPi*~!L%N6#MpC=w5Jn1pP9qyOU{f8!Bl^546s_ZU_4q=K5~ zJN3e-e zYhx{;f$;C13bV{GJ)OOu)dXV3RN*L$Y|Gf|r({IIB!+Bf4zjXw$%0cRxOWxo1Sr9T zy@K6E`zO~(c^!OiZ>Of;=UW#~N}=@D3!g8>_r_z&N)vM`ou%#ktoluV$8r015b==f z2;_lV#FfQHGJbDXY@7le@2yv*{ej^&du{~zgq zxbLh}8JZ{R-URQiHmjo&Ayp71x4T(I7?~eQiAOKFXAQoLdfziw zw_bO(vp%Z7Tr2pel^RDMJya>`xvBP;&iKIiB_KwLw*{U9xd22?6KYV;B_QsPp_K`f&;&-+MCLN^tKC%=P8Z3+y213h zx5`+bSF(>8L)O*o2|Z$O*8_cV8HB2HEy>#6_r>6OEbusawT z@Y&!P9tFh$oi0>&u~GfH4qZ71oYwoCE#W;E#8NzRGBt zhg@p}Q^8hF1s(dm!>vg);AMN67hXl(!j~cP>n)`!O=AzIZkJ{=284C1c0078<%Irpqbr_M67Z&TtbuK>c zO7kR}0ieo^Gh}T;U1j?tmnKhM85!sjb8jB%Ji}&1%odD8AzTkV=I$wmhhF@t0q6P{jQb5?qZHWHpb z?fo=+YK%>vv5S05l}W)8K8y|OA4l75_fB~(fs`Oy%xzD%nQ5Bd+P%}9mDQ7T4H8nC z00y2tOWXxM`BSid@clY@1^y!0#LhI*~W;H(to~-)bkto}-YO;T(wN z{_2huK!T@8Zk~K}%@!%S|AtB$GryIh1{#)Ef2a8Lg1%j$VMe{%#=}r7WW7L;ss3mw;uAWj!zRw zBbNB`|L`fcvla`v^Rc=mG8+&UhYu5e2&+)0QOZ**x?M^Doc5IlQ!(t4&JA^$-Yum) zUh{ZcpKrmr>2J8lG{t#jM!vMs zb2)Y41*_jOegn5>c~=)Wrsl`4^Z7Z1<6%*$BEe4mtrlugw}{R*?hxmL;h+6uzjmp# z&NWs(4)o9J+wb0yBM78D^!Fc-MO@VA@uW+`m<9Q{!)H7eDwIc69A@Xj~YJ2W!Wd9xUrrjA_3= zJF}P@1wZ`lvFu!XM#t_`twyn^ua)f}a3(Q7^+}zzpfjTIK^MN&-McwbKRswpEoM2F zDpk{7T=w|q?+!;lp&{Fzf-olFGG|UqHp2@pLzv`o8MG+EoVnKSXQ|PML9V4((+C30 zgBGQ5l^kbSGaV5KV`IJT@WN5|Z8_G!f`D9&D$>)Rl!lyQg6oJ>3K7mXLIJ!A+gE9e z_J0@ZSABmfv`;GFP;u`2r_G@y=m;2BCXd6$@^I1T_m-pkTvHh9yY#9`!isPaS1fMT zxXHR&x}MMo=?8uTtLp0nBqft(fjiysk6|}E-lo&HpK7Kf1COs;Uo%fR`U2j^G58GK zD-mh@H?&|?4KHY~Jd1YL&03ZA=bgo1;8{e7!vv1! zb8m9vkY36b1m?6?Az>!Y>wlRwv&{ltHl3_RVEx4bqn1>3dHdU#^wFt4EA>5)d4 z{F$eB3?gZDs_e(R9fQt*dX;Ci(0I}3E(pP$W~QtHVY0Z8scP`|Oj5HCXBkk6gU?w*AX2e9pq#YyHU-KR3(u&*!atT6Io-(;g7vAcq_ z>}lNUmGY84$^SbZ(mx^CI{UJ;Y0B%c1_b8F-Y}k^W^8P{hns-}F@WXNaQR7hbYTb7_i%d9TcicL|GL|;W`XT?q z5pZlwWFanq8?M@~W|3wq@wE%zH>uU)#Z8GBs)(wiGU- zKJn=2g-zzh-Pq&NDSFx&wfAQO9BcRuarfTZDs&fkJ?$+B8`YsBrVv39uLJwFuPslK zV|S9cXU{st){hTn#nfY?rQ1`&7J|5V&9szAWS+${GB;c@QpTtzFI;t}jp>jLx}is4 zJ}@6*cLU9VQHnvxwk8f-w@nhPJw13HME#kK4{R5@DR1H8t?A ztsX(n2`Gsn^2sPxR5EMcjHDH+c3}0@#-+Holg#`Oc%e$-hyDvta-PO@R2!~U%Vys*V^UreKh4KTQc))>&NArDL1f z_&*)Q70~unhe!~)$+kot}FzTK29WBBP(yOJ8;aTlA_#qAi zK0Oc~3Lkyvr$w-+I;{z@YkVXb6za6}iL4KUau z`#;KHWWYVZjEh~i#P3SSJzXlEPG%ZcOCZ{NlB8_=wFiCELCJmPRpdNXM-Zz7G>-`1 z<_!km^URSa@;h<9GE|hdH)6Ks<9DV8KiW4FB4fei^6$tN=Tk_2|1|-0=%rY*e2I-Z z#fMCeJ!btfixj?L&63@=t*553*a}9+dDh^;-QdhOQJS59*7K~xn)(U(2-6}N@&}JU z#>!Y#n@Xkm@6-a1$f@}9Z6B|{i$`28(5#rPsqurQn+I-Yn=Pf`J$Zh!P4RLp7^Pr> z^tk<-tuyK3{n|IZidoF0VMguzCkNiZ1G2I6*!j_YIFparQi2hruVR^oPG)!?qJu`)At0Ih``QOH~-dU*-rlE-w>5%X`l5m zzJDP}eZO>#EYWAfU!p&T;dGB|xVRBqZx$~ill49-_-164*=dPrz|L6AN@5&ZBCCcdnAY6p@c8_8LqVo(FkDZ;i7a1|b^GjnO61hkz zA`7vK!fvylaD9#Q>&}*~I+}*yLIkSlm~~z$v08Y)DUJqa5m*z6v!E%1iRWE~-)*Ho zN{zSI<+K0=;YxR7nQlplmXelQ_rtRzzX!TELK?mKtiGED6%0l6a31oPXE~`E((1h` z1)G-|L7e3zlPlNEEmG8M;;@E`~J zh;Cr+=UbfUab<+Z9!i)*f}IW^8P^+JPSoRU!u=;$HkI%b?D=$kV}Edd7mkR5uYiU= zHk0*v4qPjYb zbV?TnL<_O2-j$I2%C(UcT<^YeD74#^r_#?nouHOv+0(ZoX#RI%D-3&|XBf_1WL%G_ zlSLUmt@W4V!q+?z0Gz>~8=)g`={^u>sA;EJS&>`_yC#S)MdbCy%YuwdfM{59)^~F9 zr^j4V!L+85r^&D1U}0UwWR858ZE?>vv(|7KlE|BIO1<56HSPbT+9UdS*qK1zfu{**Z^) zHYAFyLJbO`Lg&d!C!y`h~?89{V|-9n_|#SMEXc-qFwmpQh|PnP4_y_gmswu*!uv9@qZ8miDWdbTo> z^S`{M#35&wygg@zbyi%WpL*CE!H;rj-!5NIPl-Le%}MFwg-a3E(YySUJh(J{=#~ch z*UHf`fPKG%Bzwh)CaG}jgKU$_3bi}5@w7BTpc|(A>AP5 zseICHLvqX^4zxQJlhpg^r!((aM?%9cxFjl^tcizTZlttR_Zd{F#58_J+F7uSJi9R% zXm*RI7O3v3weUXC(Hp96(oTFR)-&zzDbbUnRsHa!(6~yCp6IzSY2GY(L5uA@wPu#o z$m<}M(|GBbP2LLfS(kz&h3WeqUm5-n(M`m%D|~@-q9uMZyC+M0RS#%+TkG_siQY0A z#52`+JF^A{6hxKILiWUuEhJ|{6!@9k#!TIMSLlf#KdkXcWk70D}3Ro5^O@8OdvvM z9m?JruiGG%)a|O}hnXTCTVC7RMFkN+->h~Ol3QVAjt1lpZoK44OxR{^55gyZ+!E0Y zw%=4;X%BJPnn?}B!@td($q&8sc8Yzaz^q}vD-R>%`5Zt!)j~(W+#8-U7y28>T}o3X zJAPPaZHPHF?tkVx(PSiLR(hrKhGf|Tol4>o&r~S=iLRyXQgW-o{7}<>TYfO$SIPI} zGq4QCOh!PIE@7*oyoW{uD#P7?mqSO^VyM8UC|Z*SZhUC1odGX2j&zwe#1O_RQkM-cC-pmgLOVokiH*3@S^l zr^=Pmh5NtT<&dQFqQ-St&jYtO@U8JWN(4<Rir=AKw4w>m+q{V8;sS9sm}IF*#WPq7SKoyr_!tH*Q6KS%`j~np>*HG1thVZ{G&SQ zCZ_#?A&Q1YAvXG(X}5zwT40)o8!_#9nnXQFrI?)Y{)xzLM@I<-R7m{nw?i%xCsNC6xNVH0R2Uy@15_!q@Fan(N!yJ+BW+2vo&ZSyDX+mpavG z{nzIL{D$*2MTbIPobzkRfLK3TlSn3JL)$luI^MSTQRIFE3)n9G^5>`y8tLi*#YhT< zdwKG1HFmta^gKQ1(41)OTxgQ$L|9=yRwyRp!Jwelk+|^BJjk=11j4&IchS^)HEv)v z#X^<;6BfeF`{($*-k8PL7PWRVLxu{essC8 z{c)S*(c!1Gtv}cLGjJYXV|h3tU3=&!ul{qs_v-0T?!~%4oY2|Cy>-nz>M_UlQ0mm_ zWKKu2L(MUtih9Sv1rWw@b;dZJ8)_H9OG?>SGm5QE_1dlx92|=%sJzljjv>P9H48oE zn?jfpyPcuqj)Q8qGn>!u4&ie>pO-$txwdCyOu%A~QuCqaD_@i0{Z~vYH6o^*O^ZBd%2WZ zzyE%fN~vjpz>*DGHy6^0rBxopau`^f8-3?NN*Fo{8QODUI5DvO84 zx*7GQ;3E*$Q0Q^>(r0&X%>4d4=d+82x}5_=d)f5X7RE;9;nwEmnb1}NmSa=DHTp?} zbjtrfLyCkZwUShDo=mk6AK0UdCs}5FcO!Pw!W@vX9JkOuKjvCy+=)ZJb}( z-T3Z%ZeRLAJmfTZ(y?C3so;Y+8F0P61|plljFTCVb2$NvR^I@$v=R{99BsZy`D7^QnEb6leWfteFu){a$JD zD)MJ^O3lm2A5n9HF2&UDCL&Aeh~Ax<^V<9+kg(N@TQ_z1v9}t-^hr?PeM<2Cf2km0 zu&nj?6-vR?HN1lVLfkkngH=zc>}{gDyPr~!lJ8%-ja!N=!6Kwx^9Evb(z04lUe_c} zRBqhW>V+mLYxAa2PBeM{j*sUls{IU8NLVB)UL1$op6&9-_+x+%cO2Exjq#-xv4$ z;al%8wttoeOMqU1HQv;=INQZXMs}xGLo1D+r+iT6I&OOZ|EnS;+lNb0gm3M|HIa4!0 z!kR0I1p0~IR94!vph)r>MT*NGc8~FFZNJTUB61%pI@X^byskFC^tGBf>z$72T?O<> z+2+&Kh(ms!o;1oX3Ql85bjBJt?Y+mj1`VvQ`*B@~(@+V%Sjc0;A_WV@I`i<|upbXK zDN)<4C(O1gBTVijAc`>Nzl1*;))Ok8%bLTPZs0K=cZl}cbDz8IvY#dzeQDft;LBw zNqo@_qTwC~-h1&VtkkVF=zjIwPfXfq9&I$+m^<2~5OurF5|vmYI6F{N`p9dE z7YssE$?enuA;)+toxIKC^?}xl94ld54S%foBDp*Nnn zmH0!I0u_3N;AtFBXLLDF+hnzq6UR`eiI)SiC-{g(Cn)K|?<%ysgvU4iFN$~Q=SE)P zGpL0<(EAm`6Zj&r@Rs$j(-~mHE478%=_OOK zxW<$MW`kb1!yfW^9EjJy6I@X)+YHb(F5Q8@^huH`yk@yR6ekUJ(;rtOr%ita-_a!n z^0$QbZk@Nf_${)5#4#SS0Iz#F&(9sScw)oEgTphCq&VW|xg=+qgy@ffoVG&AQ0mU~ z<@Ok?^!y`hOm`Rqxh`unv7=sbB9wkrrhOT9b%+K2^RsF^Pj|{QD9cKu{2n9Pe@1bi zDeBQp#9KC}G?<{rYW5o91wwXe5uB4#=`(yVLd{2{G?a*| z=;Sf>b{5p$QFaOah#&S(!M8Glx6T?ir@&KtU?)Sh^e)igOSO^(k(pqKDN#Fah;%vX zb!kQ1a~yS1K&-~d!vfojdn{B2M7k1#jM6MaI|b@yL~s-XI*P(<5b_1elAHxL zI%s@jZwk8PjL+y@Y$=UALJ~%fjWj!f5TRSsw}USn+HH$pmQGD_l!esBiw}{Hs%>6p z&JyGih{P$!2?t#OzX{_Ay0#X>B-!u{R`vViD=wIk>Ea1n1fo7Jn?fW+6&xJ(;od?v z6xJfcQjnJ>K_$ZN`205sHn_^?^k5u2k!zx|XZ$4;Mc*NEA|-r>iYO!D2AUQlfK0B5 zLuCtG?a+9Wr2j$*k*{YTI9bUc5!@B6y%>pH*Z`8k=JAc)Ay7r7Ec-}X_7^qe3G zs`X8QlnNvyc3-|&NARkkmcSBnA8vLOkzIO+r{}tXk^^sG#`j<2*2k8F7J)D_FZtcI z5q{HV3qWb-xkZ9wqSDAoRGz=s%~Sa8e}tgw9=Ev-J;YUiW|J z@8Djoj3tmqq(4)+uv3wt2-Q$;F*JLoQsML;s`?kh0#nxvP5PP3H8-Dt-N8)Abv`8^ zT=Vi!jXAB4UFOew4V%4!Kw`IKAp*Qpc1@4FKAYEeDPCV!9M60J%!c_RM zG(x43^&xC~zqN`53C@&#*S{3!hEJ@C2}s~b#XBcS7^N)mZr=x!Z%3*woud=tMQ1jM z1R8iU@h6=759HlIZzqRy6{@vZ@8MoF~VktAt8?M;m%T~1QidpRdGQu@UAlW(DKe)@O5^f&Ic8S|dfXd)=6FSzI@PBzyAC+|s8m}7| zMyuSScKw5A`gT*neL2p3K1Q)DUHc)73a}JUf$2@Qz|Gn=N9}gCZ&d(f^qN;0yB&Br zyY%b6d={VAo`$DFGn+|W_ib8pvx+%we;bjjInR7q+AaUs%T&YPpdz)26}ZzYBEuK$=G^=ooMDO$_jJ#|y;PD*oJO zDQq*bvlO2o%Az{~WLsVDwT zF*54!FCKS$FK+k~;*TvY+)Uaz8PB~XL!W9pP=QX*46Lkhz+) zVnqDi`;yPeo1`>L?%nB*EnaCyA2xj5d$BUzU^vt^k9C5BLZzPh*SwGr!3&Z; zozs+}Mq=7dF8$Dp5rHY<-9+0KiJ9*+RB4mEZn;nHf)_~p#a=&9gIby^1iy=qscWIrVHSQ$z%UX>cHUJ6F#Z!aAi?;-*6x z2*C)2MPH%mPXXHWA=->7#{(8oS>e&v>TuHd%tP;mOUPd$$%V3c^yd*>$+q0A=MH!q zSOuxgY!_ewpZ0eH6wy?6RK>*5(0=Dx_DS8@SZH9N0lX!x<0#^g=`!QDU?}zvK@+s- zzXd?74MMlV@NCW(rqhpc10y^b7Ja#lZaz>X;d9#2{y`#>J((6GhLON{Jxu&SQ@9QP zA3d)(A=}@5I`VLyT5=4_>J!{mArH{WjyBSB-Ou7R_PiV(vLaP81 zfi?7KO<-WZ6dntML4F82H`w)n94+jys-=F%Gl8K2c&GPo>kl+~udR<0v8yc_na4M_ z6QO0=wkZRfSzhkuuTFj`#eMW7%u%GJF9?tsyt(;`RNB|#-7-7mqk!!I06uGsR2rDt zlX}5OtkwQ|qeY+=u4gFEy|62!E4b;tmL(1xl(Js5+BYx$fxU-6aBg2RG8J%6dXM*v!kRqzenIA<=T!N zdttiaG;~S95l$@1YaU)NO|wFwBj96~&hDn>b2QJ)^_2*oQ!h!o7KxKJ$0|-@QvuAm zEWo>%d%8d9=xL49Ft>*u9g-C)1E)OgMXsugAY>Hi#(vh#26u-9pG8tnh;YtmH~BXn z?$+oH?6Q_*O13!4AhWkD_s=r7f-!Vnv#Qj^$J#hKwjT@DlHF^E#0Z7ZLwpOm!uQO| z%fR$QoeYC-%N5qMO~oX;uMztbpEtm?P&_O)s~yq-O1N$E5vZJ{W73q zAUl4|Kg#Qh41?W^#bAS>ypLaq$6sc2jv2eY|EO6d@XdnAl=)(NAjjyL!9C-%$Vxo( z=sSYz=jXde6jwD10jDyNfONXW5X?4xLku`*U-2i4$?z8PZMM%hu9b_uH_1?mX}}Ko z&bmnh;1`Fsn$C1&XPs!X_|oK$@s&qLzn00NIu~sxUVk!SH~Y#0goll^uX|Dl7oz*3 zLTHdgBo)`AFXKqmh!>bumELXpPW#z*tr6r}FT$kp#$bg{ZK~W@r#a%I{O4z9DzDfE z3o8RvJPS)UDQhCDw3<2GE9S<%Bd%1Lx~K-2K*-@841?0s>>%`4vb#+;Z2zp4wkd{! zG?u+QpU@gR68xr3AZe|7z{YJoN2y?qV2!&oyZ}zsm|D~zK;afI6eSfN z+F?%bqq)g$8;0UtB)9otl9*sDs}F~5-(ro!!#FwJ@$Cc|h)kqys@H1sD`-kACA$Id z`axH=)yXXuv1O(NnimJBv3Y*YsIB&)MaRSFHv+dz1$O=tQA1t{e9h5&wXuLypi;L_ zCC7!8zJCc()%2V0+lZSg~9UtWd|1#b8+TVWcc0g!o&WE2HNURia=38l=^*&fR<1#Va zKH|AN=y46~2Mw$i;0Vm-ksLT4>{kFk-tL~NI{3B!(`y&tGu89XxEWC7-3ciQ9KnFZ z-lfppfb~82UN9px(LQ9uj&}U3XbC`6kGv>hlCHY@oz4AhLr_eM`%SDA60kY<7ooWX z%Zm{KcV+pZxS-skBrm{u$)i|%yY*vP^HIFe`dHoXW2^n!vG}763ppW%!E8xQK_D><*B=0n$mlYhgoy%Ro`?Rzr5r^k13 zG@{Z*TQ8z2L(f9i5M1P+1iN7SYa`vszjwa4fHN?mkJ_i7BO_xd6Bf64^+$M`=ehKwFGSGaH^jliL;XqhYN72#R5%svTy<@k^7dPE=wQ^S-NV9FRNV8C*2LW zXj>^zsPS8pMo1aZK1~W0o_^Hz@}9B}9#-b-zQf(P*G3*Jp>=?Z};03JaLe zAl`8d<8>bSBKrpKe5kn!`5*x-O+_sMfxrl>loR*eNPqxHGzwD+yP6DB3j;K;>V;36 zv7O3nC9#S0^>MV6`=R8EwNoGfjvmOK*j5X@jQ$1n%e|Y%r5gLV0O6#=z2KmD_$pTu zvBKjnem~LP(yA&bGfCt|NW!5tfO?WlxQJX&v?#X%<*niS{5Fzdm0 z6~lQ*coO}d7tmI23H683`_XtTzx7hfmX>a$I$&=d3pa_RA(mth{JATl)rw|H$njfT zxRz@YHBKbfd=Mdf@^fSZ6H32`jKbGDeNpk!)41#zt7&|rv2VD-E6B_ z`?@YFYP>w>k8wjXu4_aPfv1lZoRrR9aWl!R>wfNecY)uz<6DT)J&MGIHS`a-Qm~8YY=up zbO@%;d5cVS@X5lp&xT5UkZ11%cMNih@9MPi#{X(`EQ_hqDj>MF?y@vNr~UG8 z(N2?Cg58v(fdd)=K`54%CdN2Cq9Ec4gK7-)Bxl7lc=7q@sa!*aTZ6mby^ z3p-m=vT2I?`pFz9_GAU5?9sls<9DqASrIt>W&Eu}WnrZp72t^O2>#zK7QhV6(Y;iE@i2nU%D~$8)wByI+27f%2e> zyOnhKGEIUmbQ6lNsV^t(Vr?^t>WREdYuB| z{jy<+GGO@Jd0UUlWwNigmt5D~V5-i|>?dRO^(LQ*xSJp2nE9`lvigVlu9oH#tnI&^ z$H!PHR{K3N&9NhkqxnVl`}Q+HGz7LHF>@Y#GzH^3h_zs|;ZMF8A?BeQ3(9{|oNbf- zhKVZ=!~0&l6(p?-Ce!*~#w5#*xhGs?cm38kHUZa6Wos8&pXm&*RBc})bbgRn+2$$g zu{D8JJz;DAbm8mYXDiv zCMOUxH@QrTI-kY5=qltxn~P=}{ntjPc^Fx{ZOpGv)L(Rt;Cl}^9br_koQNQfA#pMv_@x^|(a z`l8Mx3$=#1*^NA_K}DB(e}~QH?;77W8}6){-r`8Sd#s2_VsXipc{{}7Cfc%otBK>H z!{oroKok;c(*$;?O&m0Ft$`C~j;8^*v)hXyp3(m6!RuevTPho=TY z%UwX4bo8Ctb1t>Tm8bCjB9m{jr6>0y3@-SAIlwOQ$wA-ywmOp@}`;=O9W-<8k@ z`yKGJBSsg>{6rm082k)+?-g_z0zd%b2xURK7%yd07=4$TTE5<>LoI~=Gp!KvrWXUk z(B`=6XeLe&NrAdf8YRWX2=So}jLDN7FHg3tex50^eks)xY@?;dEPPu;k{h=5s-W)P zp?sc0CYJi{XZiAffU%{?DcYd0!czswfG7dE2x+=cAHv^9kGun95{HrEEK!^-!?P35 ztIO1#2N%>X1ays#3ND6@V-ya~cXL1$^8eLdbHBo}r9UBoX^LBRfjYGq7|f}V9{|sE zqRRzgSTA}!_@6D8ZVySo$9DZVSr0E;Q2-S%r={_ISgc##=s7?gVqGUR_NkO>{p-_` zT%)B%um=q@iIQC2@SXjzokgE;;H$iiic>EEMY?yMFF#nk&CfW0LB;7C-^{@LW_L%t zh3+nLTjTfxVHXH5OlkU6GiSQjwz~&I&9utD^WBoy}x=S_(l2&PtWYV_T3K0O|5 z3kZBU*Qy*P>-(n%f}ymfRnZ@JL8#O4&2TaXS8o|&*FG4QF8ux)r%nUOuWsjcjEZx> zBwcq&X>z^>o;PmYUE0jlxMdy!{Z?vqg&OpWpu7_7{B+0Cg$;?0p+)pa2**p^cGDkLnh$H5d4?_s-{5UsL(VC#>zZU_yW@O9+JoXQzyq`ou?W+xHUe_PgvYV-AI)C|bhK0U`+_)g&C zf%$Hq0r2IyqAr|+J=9W_xn8gfK)yy$k;cnHg=j?L-FO2;t-YbNR>)M6ged3*nn{`) z2vIwA1My3-w#=peg2^9J4Cwfa9|U!ADM>-pC#>yUU}d*T$a=}|u<_}St1MM7%@{X? zFYu)zAazf5^|mt{_V)CbUGE;?1(vzLlTaK%!g7he#<}Taa_D7Plazx#aLmRBz`&$l z^C|FsWO!Mh!uL|u!+H%kf`;<-nk5tm_!hsDuPLD1J2OC2bFDxKE`KX|J+R||H{z-c z#R6nF3u^F;SNAqaKziClRg<&&YEE26Uq(sE<5w5L&Ehkf8A@MJu$;&OlH}PbJCR%8oUi%o=T@ zH~1xl>%^s;6zxAH|CS;z|N1%%X}+nYoA zO$;HIOrc>-l*W1VmGHHtw@g%2>_|1_lz>F+q8^Y<=2cbOVrQ9foEZM#ae*=(T?RX` zFVDq&XlGcO+Wna%nDl)?OvvH;n~MdPh%bday%%S}Ov^u+;F)2TX}7|`6m^$%Q-}cJ z7o<`J+jSKP|GCc?!QH{oD=3GU5=T-h(`mOO!(g#(xSKOLp6ja6&4;ac96{;6Fy5#m3x4A?FL zXY*)Ge%+=r^6H?Wtob6BLt>Sd-3q6ugDW7=8HLpY(3T1h)mvLYz6u!@7M6Yv4r7z} zL_sc!`-D4u?)?P|C7z7QOA>DD3HNh%zgxj!tEo|zb9s^8}@z%)I zB|G&X!>C26gT(eKeN)Zg!#;;Gxh+4dXzX8}6cacikHe9Ym64Uy*i7Kp6IOj=0dXIA zy?#&8o3+>oF`*&B3ruESkIZ@1pbLI)hFdsLL<%D`7isU4=N=_$*lExAtNsl?YxNI! z*GHyz~8cdDOUVqM;9`!LWdz4 z_-ITIdKoJZ2)RF7( zD%Y|(YB0 z&A}4_v|;1JWm=llbav84M z>PwZZ1Q+b#3#_$5sdMPs!Ko&FvF96hE<=pbQ_&pTDa3=<0Jg@-1(BAYUI^DNU zNAdw&jI>K2{y`Ccku(hS3Yvcf`x?tz`h?j<*)xZtkaHuF&&Fh$w9yblyBhkzU)yyb zr`bV}uO|^h1+}%F^uO1CTXvvf<2R5siUuV}@%i?lWNB%#efy5bx(RlGLhN&@4FdgdlDR35KO#&r z30;>2T--)O|Lcmg=a{qcF^zDf#B&1M!YOn?yk2?YUaw{dp2Z8nqmytoFli4bv)zP%1v zfp7B@9AGo-Tv0vO`^O+`nH6sXdZYFhX;y5~ydDa(3gKz52c*5u+GDkhPa1uDP-M~q z-T(m>DyU7jx>nn6W=R{UK)|IfiUsN}TO@ltxYo6w)g4Yny6obI4wqjl zRpmI~cJc5_7fwR11y(SPQAeM$gJ(EAoz%oAr+d##kP-3xkK$H5d=ZFK_3X|<#ue35 zDDrZUk`cyo7wK+3a=`EZ>C5dojx&qRs2tH{vDe+SaDdI`F#96v5OTZXSBQo$!qc&# zle^h&Y>a2pey6wGbL~_l>?TH`*BMe;tm8n zbe((Y4HkQClW;s3Of{f zI?{hnemb4kUB1aju02p4+1~5j-ezg-({hsBzymiNg1dx#y@;;jcgR@MO3$L@(a899 z)A9*%DG#FH4Kse0jw71Je~#2Rv8E$AyW*tG^vjR+kTW7l;DnE(GVNGJ7xkr2sRWyv ziUBWld_r3WbojYkL4t@ut@G$Dc!k7R;Fm1Ne6x%Lk0J}f*>x?e`G-lYk5v6SC#fq*z|6;kd4zX5&RMDm^4U;F3)s#!8ULPu)J<} zd+Ta^RXCW7bTG8#z@;>_4$1y~6WLG5P(Hr?<3}@orU{)SQ)@Lw;xZZ6k;F*ZRkeepL+YNBgT5cI@cjS=_c|&B>?h z=$_6gsc*P|!ymka!P3N8SIEe12@U_DsQ{`h^GNHS1Jh>v4=aA_#@hLyubV;0_>pX| zCyT}IhDYG+b;`v}p*a6=GU(v^n2d)+sZqK3+5XnqX0Yaq&M7wcT0oGW(fq1??8fc2 zyz+OLbjxg580wRvh;}m6Zyl6xbE;yIwXFvU@L9cl_lgAS>CiR{PsV25c&GRGUj9+iIch7Jwcq-p zep7vG*M_(MdfkiztZg@Nw$E&FrkMC8MCak}kESK>3-_C@+UT|hsTW8wFgp?`MbdX- zgok1|{E>m`WL(cky(FSF;-9oLh?ltKWWC}5G*y}0S}y2AVkULsd=$8}0RPx1CN z=~5rB?jI(=n+Y9e%MXD`^?7J-TS2Fpn|Alek}ZsG-a?x`Wk-L!X@u~x7uG#odI)yW zy9S+AF$4ZZvD2Ej(NrMn54&P&AuWF6MI$S zM4})YOtdyNL!$6uhb=1S-@*kB?avZ+{RREqb*J;muQ0A4#II;8lAkLxw7W4Tv$R-> zNtVD(2iM^&ykqmbhJrC07BhKA;jPvy0YVK7OF)>?x|=e0_yW@pU=6@~7mjBOJ=wCH z-Of@7tZlK}$#VX&VpDeL@}p}~PKy4#f70^j_v5D>dLgc)l>FH)?|Ge7ydJXuk=1w^ za$57?fqj$J_m5-m{ZiAn*4sy}XXB z)=w;9q8K(0si!USymy1v_M+|}6VVBgpu4`d+i+ntC>?!OXKep1eyOj_`W`IxjdgD) zUB^}RMSeP*ubMLLnvq$(=DP<&-r4wT3rC&`o-kyf9O$#dG75f$ntriu5NR|tDT3CISzwY`|ZA59LBtsJGFLz9ln$O=;oZ# z5Y*AaMnO#TBog-w?2{ds?0?kh>SwDUg1*}3gOjz)=-H3|%1^sbzJnQf(#Neu7S(qP z75A*bPH63Uipf<-%Sd;7=N;-2DdOu=;@(~5cb}P;=W9 zVjm^!()>5a6V*csF{_8aOV{?ygP%ZuY8CrDpeZ67B0u3QPw&Ufe0-u7&I#FBiB^($ zWKUYC`bstFlGwyxc`PY)zD)%6V(9)z%>bzJwqGn<$dQ`n;hu!2kRipsYtMjPTd({{ z$WGPGlm$uk?>1ltkQ&`_vuh>h`Hk;woyosvKG@|iC{Ujedex?QjA@?^C`$p z_pit-IT3F)_uwUdb2L{s65>InxNKeHN0_G1F9Zlh?~ycZqwK|s&I?VVX}HJcl0%>U z5(c+H>0}FZP$0_As!}kN&QbDq2v26a#M{n;bU{CO0AB$Nd5Gaco1I3tiK5-Ve?+gt zg?1K=Za39ORz4a)t^#WUr&wuLLO3)w%WO2!ENnr7T35Lb7QHa)GB&}zR0R$XGr=Bp zC;pjto_e})3Uj#=*iDbeOf;EPI4-$Zn5(bM`OX5cTP;`#bX~1HDe^x8Z=WGQ_4p=} z8;S2I33YHWdUoiAGOj8mc+sHg$@i9A#!Ms_Os@W?r^(`e_Zprji#uWud+ik4cvI&4ZP-D$>1TPCjnz<* z&}pJ7(Z7ufrKgtG^j<)pxk7fsVM2Z*11Cy(a^{()y!j9HZ zvOEaCp!nrnDTI*zgZCxYiIupH1g-w8FKcCyVRt3TT|lU_s!dDLx_>*cDFlXyh2U5F zSXBNn+NCS9D^K5lR#$Bv6=|4P73ax}_WRl%b3nHw-*-FFyO8fNl=}vEF}lWsx9SF4Z_s6N72@&5Kw8Jo7$!kN%sfEq$tW1A+*&-dYCks!$GVRJO zx2%pju%V(%wiq+(-P7m{XUpNq9J25zsy~!5=A3!HHF;b8ud=pUy=jAO(c#+fv$1vj zuA!Hst$9aVFs=z*gxo@fSi;_^Q()I-Pf@Mt?kkFz(7omW+Muuh>u$rR=DVnaf)O(P zhyP5$STcTcAk5{VA{ie!Yo; zIhnF2)q&lfJFs&$?JcH^Vwt|c`yNQK&&9Do!v#bazmZ4c(u#K=A3(-)LS6^6!lOnX z5I?y)Le9A7b+JuG-G7>lj2O}&IJv0Q#}BdnJx)n}soq%N&w{1?EMk}Du*X~i=!oDe z8mzZzSErTE`Di0K*-HMUx4*t8x8n@P-68f;_j2Z3;4LJb3g}CiZ=Ft2bA^AEL zt~5*)L?rknk8&e#=e#0^`rjL86>we z3n?e?e)u_i35CvbTsn`#pe#8+Q@OI|3qjML*6RIaNHvCF;et!I*nyb~xw&2>wkfWMtGkpuPBsjSEy5K<$bv@&}&)aU6puOqg zI4?W1N4pCEC*j&w^IoEJkDQ;5a8`~%Og->ZK#4=FB$_6L_?vv&)&6AJ;oG^R-M z{YuMQkP1ktao};4tFn2Sd*LLoC zTD7VIPB}CnQqaLl(;5gh50-JWu;uk0hD4$GgF#*uc>diofpmjnai7B}mL`b($%D!w z&%TTlFBil^W-%y-=ll7X?a04jZz)rux~}~Y6s+arH2yBN(9zr<)gaWK-^_TG^um8_ zl&M9J`d*_6;a6of4Di?O zJ@-(@Ptq+PzpXRKxG)dC`d!GSELFO#8aoHuLAB2fd!eV@8ZEEY2S=;U{)6z2Nyrw$M-@OCZ%>n_t z?mJHf97YoJ7NiGOo*Ga~eJb%+=<>{(z|_oA)0#j|5y+0BhfLiOLd}gTjU42)5cjwN zx{1iUh`(WmBFlbC$j*rv6LYiqi*;A+(pnXihHj#6wYcnDEUzH2l?rd^)`6Jc)DR2K zIJs#WXgGqk9(v_Dcg+_MaOT(rTNDsPP^d(8Sw1y+&|pL$n6NaR&fG7_zXNKFJb{nY zcHvo<0`TD(m76&R?m}t8e({x$QmJKc$h{o%K025?$~>D^nVKc_%RN=vbRnG$bho7n z;e%i26fJMu|5DHk=N;kzEz7ro&ki=&%A-XSF3bCR%+~@ znzRHlm}TEOzjEcRcLb%`eiyVba3CtKEZFXK6!ungnekJ0xn+%vY{fe4fvYu3oh+VX z15E1UY{L7POYt)h99)n#Nqso~eVHr8`=B_o^0 zr2)sped24zJ0=EqmHv${7dQX9R2bNHSd4jE+}_9EkEe3`K|`Nuzlsy(bmam_7jZfnN`6X&N&ET-*r z^tn7*2;G!^61u+!a!0NnoN9TT$J2I`buuz%#vj-2%-VAY(77=`X9k6SG=)#ky}DlK zLkj_^gc4t}%?Rs@jKdKf45iK3N4qW`AFO9fdXy*O3K5&J+*~b>5yF?q@xWy$Dr7Wi z=%+5;qnTr17-K6QL889)#yV~}%mvl8O8X(E6Ggqnv2e9(Y7TGAbkG2`2K`3bbdI1Z z$GYsn&k_MDM=Hh6X6&ZiFE^#_%$~PFsJFB=$d7^Xl~SE0VvqQeVNu-NwH=`A<1vkV zTunm!DqUuK)jKk+{Oq|ZwPs~0z850&!x@L{zBF66RU~bn@@;v$eJxOK&zsGKCwg7x zBEemCPrlcd;RI%u8^OLeA@6AW1a)f!F4{<^j|s?x($F%=!)QMes1uLi#;#yo)ERg? zE*l1QT;>O4o(x6wUA5*p<{Ov3v*T>y7GY@qf-X2@%``~YZ(^5e1-M_tHVxkdb z@*kM-IT{O%l;v|fn(zdMmgN!Wum6?%30j-X&prZ`t`gv1?VMGE08L`eM1ed55)S`C zATl!YE#^oiQWQ1|tQuYo-EY9S83txe5e;k#9%D*psYyJdSdBsrql*4Zg3>G*Tp};u zT~hi^4x|c%;j&{_J#l{HA~#pA*8p{4lDB->J#X!Uf-#6f3C#iR2bS#Jci&>?REIMP zPY9)BA3cWj0n#upGdr=mFidYYPoO<^%^(<>YOZDpk|>u{#T|tGPT}j*vM)br=`st6 zs+#nV6VREMEwCpu0{hO!Pv+V=0YXoxy=vDe7=M{PJs&B(7LNtaPXd$2Dl6wJ-kk7` zBxZ%XeGR;QMg60?7$}pz{`^0dvPTQ11hp%9O|eB!7Y?N<#jST> z`ek`EGng1fYO4a$t@LZSpj)$AtX8$^Q{@&fb?Ut+)#m|$GmGfvS^h+WOZr5$ceX$7 zw{L%X3iJnChTm+YXUOSP+gX!rxt%7qBS9?dQR!I5{>CKVDQc!TC^*{xV7R;gM^}Ol zfD;zw^m!Leq_@60$n3sx8oJRR%Ms!<6SO8$1G;drVx-JoYI6s-d;pQ03bhGb6q_45 zDmMG8X9v_HA0KIf!K=AP#e0h8u|yok(!{=7F{h7mpV^9}9d3xmI64!q7vEPs;dfZM9xD$ekI)~97 zxZjS+C*O?wfd^%vG_EZUJ2I52dHspBTY!iJQ;S=p_sgjptjtYTL8qD5n>5*HicuM^ zxd%ap3x10`1!p6TJA3F8q=};My2+N@3%1F|wBR$vv*-D_ZE9%oineW(bfDXv(*x1{ zYjbmKxra!4bXS*Ff2CwB`Z(acz9mNU-@*#xDvV*kfw_}OL7C;PFOlP1M&l!90JM=B zIu}lg+JDi``*6(iR@dDeRm$P^y^6<;LD3c>x+%$=yAg9IZ|gK$dw<=F3*cJE5jO_%?FqS~2nEt$LWUCy_F#{_n0xroKJ4^f6^F_UWS|RoUfEfyHSvCypVi`|7GP9vZj*b#hU$xu=vk{^#rT7z z3_JC zK7h#&b;mnBU;jCQ-@E~_50!x1F4X%-`kt=n0j32-MjPzx54|KlQx+YGo2jwuY#&!C zn`(4(8O85T7VDtjDg=IdBXO`RNw@W=q`4p4jH$nuiLL*Yl32wFcc0*rtVteqI zIp|DHzP{8m-#yeN*4zJRsHyz7Zsni><2B;zz+cD}B@pzlXMluUHw=J(rLzis4KJ2- zRxkCrhTjr?z2RbY)+iFf{#T4NLr?J(c|6;8Jo_qwzbXKEJy+KLu2X+H0>x1}CL$4X z@*NtoS`lhzS7cOS>XI-RO1V2fcj8qQ(C$=y6o$+0xS?;p)ru<@0d$S3PLKha``#lG z-v^P!@2|T3N~@3r2WgqJ9kDZ83z*t{eHz}FSb>}I&l_U6%S7z?QP_DmDoIUtc+|?o zTg~`6qIAn=RSc?I^&8-2BHA@LCpjbqW&xqL$D*~iZ>;>@n6L)r2k@e_Q;>maDYBO} zf2W{QWX3E)TarxKKuY7#pvJ){#~$D^IvbcC383Z8^D;=`@bxp>Hiqw{RCl^QyG{MV zCm->Ma;Mm7_m6jA@?<)JX`P3u(-sB3KDMap?ykfZ>}Hc-VJ4t@x^?AfKD0JL+B_tH zj0*V+S*r5%3o%(=T!5kNFOdfrgM%;ArFdV0DTthg{Fz$8cf^rnIFvKqO-hlE3NbF2 z3UqDSC3?obnC}{&8B&#yZPDk!J+l;oTqJ9BjN`xFl5j5>Yb~mw#3lIt`BJK6Md8;5@#bqxot% z>vpMOxm*ZB8Ppb-N*hq}|3J(;PRz>8>bt}15zU0QDZSgG4p+NX&HI@{6Kqk=u?Z|@ zKv4&6QnsiIv0SvVb-zQJPA2uhMMT8nY06cRN^~{LC7r{XQ+VcbiFT)dVutiTG2_x7 zFuS}KJlsT6kfAvg_a2-OiQL388H8L@#mmyKs((0I8<$kHnaGbl)6JJuF& zqA;czH3JRtI}`Y}a~gexiSlBX`_ajqc_Eo107s06zzCbJ4V)_cx-n(+@=VLOvZmgU zyaRu!kqVCx8MiEvo*Dl!3vhO#W*$+~Pz3V5ckL)YSs(zG^m~MczI-~`m?rDHD^T;K zPg>~UubhZ^koZoezj?AQ#e{*tQ!s~+UHoh~@L#*?wdjL^pdT$}GD6EY-@%=W6K3>))9!0=IAkk-B9>4MF;bVisnfqUE z&<|rlA4+PvItgLnIx+vx!o3`=6yFwYuq%4Qs9d+48pIKt=@M1>qVmV+N!T6Z=Na)tUa|& zsl025pZf^%^$SkPL;lG<>LWo}m=U#nha;)clDk$M55k`C9{7qiK&$7(o^>b5=+>BF zT>E6|9}fZ+Q4qm|0k&(IUYhxKxS^nDwbwmD8?mANpnK8KJc+7Y4#;jb?zIHVRmg+4 z8p+Pj$KI6lKd%`>jn%o{gRgmtbjjigB;*VUbGLS^(4Yj@55vcg9hlV0Olwd8Lkn^V zwb-NAz_Cxq>38makL?x>gA-Yz(Z@8mLwM#3F$y6T3ZTI(4`S zP^3j(lNz_m9T1FQos7TX83Q2pIRR3Z=u$h4Y|x@P$$j!6@^X=y{t_K|1+Z)*b+Z+J zPYLZ@*^<*0W21&n?~rVXV15DQU|CQ5@vj<9UjmD8{h*QH1l?%#7EGXE>-Pu9LP>(q zINA_fnzRsP7kwa&&fMAY2Gm^lCJ`2)eSp6icM;yK1s*Hmeju0ISfaXmP1;9SNF`YG zS>XQGZ6T?b)ClW~pMLn|-R>YuJ%aM0ANo(9B_}hQHY5}NS?FsAY@AmJ*0Cu9OfoS( zVf3v4Z*}CQR|%sOjYI-Uw57h_Kv^po)Cinc)k)XmJ$N*7+=d<;*Igjl=?h)|8>@w))e4UAxI=qio6%94OA80k?H^N76Qa z^=DbrP25uIyY(u!HmlED0F<0Q>OmNE_JL4G%?v{62|vBVBZQ)jjlwh=6x2ej6Y05n zGrE&r3L%6$uWQV*6Tq&ZR0Ku0B^exe8Zvv5DiK1)ODH@vs<3d(lJRiI@6TBZy^Fp~ zD1R8cKUe^6@73)D7q^G~8D81~4#ILT3Qa%cR=|BPgDarv>*Udvy!r`=XJVx1U-*9n zj`@EzDFQSm@Yz@KGf5=zKH%2|?Toe@LK}jofXdm&NYr_4q6xetm(A>{qWPIhnS|L4 z{XWKznq?)9Htl4&G#kJCd)i>qf?^Y5APJQOZl1i6WA<+PfxnR?vZNSA@E-<8%=7v1 zkd3E}df4FjL#f3f_2JFc(wE87b(hS4iXnm${d3&Cz2Vzi1iZY)r3Gu{W_K{=@h1RT zr)jtl*}}`5-kh#tLGA?`Q#Bs5iiSVlHW66GB!bVpk`fbG2x<387dL_kc!6LaA(Tlb zU+GGGqE|AQ`va9IQNiV;xo7ljD<2#M_4o=gLqywO2(Lzg|Go8L3H8qL>RU0WuIlK$ z7jPBU7W-cwe!Zww5)zqs-T2W`g~0+w#!}y@jk>8zKQVCaV<`?6Y=tHu$4W~cWYkN74E{{(v85arivo zBM%IWCM;}3(9>s^w$3#dDFaa*`6!Q>>d|TV)JCyO9es1lz1LzEwu;~&_CE#~73ExJ zP{N&_wzsp-SI~n?h@&SQDl>L=$i0xXvDva-n1Bi+Y)2sz-Pxzl?nw?-M+VPIddS$E zJvPRl2ITk^u6!?utdqGS@q`+-U(XVRdJ3QuOlFQMo_i8qMn}gqrM^Gz70t|apb1rYCZ#W`3dRqL!}eS&MgkK3h4G55Jl{+OHc} z;MLlYH!=!%VVat;l`}%BIiVgm_Vx{Dv+LolnzaqzbvFNRf+ZQ{7J5#%u+z$8?cd|kNZxJj9G5r% zr*kYSduo6wKlJs^X`CO_GFzt2eMX0EOgC3<3|b;PNbt0nzN+7}B)DKsnFt$3i0t`j zM}taeGY(pCSLRv26T!MP1JNPO(}nlWHT385wQqmZl`=&!`~}bU^^n-dfH=Hn_2o(5 zuO1VHfID+^&dyZ%VKp2wfmp0@;Q3I%!`gwY)U| z+wknP@IIzV2LNYlrMA;r4{(xaf7<4L6O7Ba83^0wAZ`q8d0l-*RlOH5^4g+)m1%k7 zzt{aIu@xY6vNzLKlo%Z9Q6!-G4#8Jm_alX08-Xl+!ok-Ygj zX(2B`jd)6>RN3r#s(Gqm)7yL+|=+Uwu~~)#_jc zJ4V!C<=~$VR&bpefDHm<+!LiX4rG}1_9S%#HQeYpFzUweUz&>83*8Okpf;hWM=^e( zIaD=<>I=8J!S0$pV3rNFDgp(sHaIXMfs_q0$kbNfqd^h!8S{UrddsjXyDnN-MWm#= z1*E$hL`oV|y1TpCgo1RV(w$0ohjfETw{&;+w>CcSIp6ui=HiFmd);fzHRc>+j!D7K z{ig=bKKtj}0lY_B@w+)ULpBwwS;E;}PM*Ty;81)daO#f05`d{VUFRx%k253NKy3^9 zXHZaeV081C_`0C;SVzTx`$%;t1lC3KifuB{3M!K zjBteC{~k*u4ki3>%XI|ci-te(yOXJD4pESUE@(KqGTtUk${f~fquT~{@VvXJ8h}wA)0vt4RuSDV^=nLO}?A#O8 z!r4a?VN|4m1ToIfa{El1Q-U9pnKa*Bms=LnL zEYnB}$T#)!*R;E=f#}G%3^6w%rRn%WtO|wKl2(k>ZM+*;N5Oy`WdRr$gxe)PSq}0_ zi|IdzXdN^!U^&(~=9DM`(y-|}LO$9tEi)lu4x$ye_;jKc?%<%a16B3GVg~4(8+sQ_ z46se@b3YqX=$3eN*#W2R7j6`-@ zn-SbgG?HLfF#!sld`J!O9(Zba1JbI(sNkEG7Te-2l}#6e3pM*U974COUh|MsmWRcQ zW>bp4Xa}3U=#4g)y)L&L&gJUxzhYD0c~_#P+jKBK=K%^`$lUzfPb^R0UWipue;8r6 zI*Nv7xdhDr`h+;%293Wt%-AGmm{U51YUnD!Yo5|!V0ln&+dVy146e4yVqFk9OIIwnY}{44+7iFwOU9K$2pDyA8Ktp4N!R7 zhL}Cy9nuQSLAnDmJ%dQWAlsCA+!wGqD(4i6ERkf*%Q%eZmQuqpUkfimcc^}3G-ddDn=(~<>S3!S82h_%RX)^JlZKVNcDs4qw&aG!EiQfId9B;hz)0?L67H~`> zm^QM6%eRlr!~a6B5!!TxjhBDO zg8L^PiVz2mU#Jei)^zuL6NT8y{y_CZ?o`R0qO5cXP7d8S69oTknm_{oY^Vbz_Kewt zoYGnD7B{3scdULO&h0U4ara5%?6eURegr#DYF?kLt7rB882ptKeGV~PZo=afR^({DL zq0S!&<;$$#tvMuIn~Yu{Z>C{Hu11b$)xIuo@7(t19V;gFNx?0coGe~$1}L?wYg@_= zDRAYjFnY-KsX*ps@DBCMkRPRHN1@&k4UDoM(>gOz zA7<9aP@wZK(FqR%fUsaQ1&*e9M23nkb`ZfD3fEeikGjmk#0+wbOn-X1;DKPrALs=a zmtpEEFExPi|Lm7k9(>{6ixQw@!crC&ATqqZ5-}!XqZ`kC1f@2#=Bc^kaSa5-) z4*z#3X`)C|9XH#tRBJ`d}#qk7FkI?F8}~-b4^D zq$Vo)@Hx;1LTsM0KpaG)r${gWa_`@+kQViuTD!X|58$;`k#58* z4yf&IYO9!ZTLZ=kIOFW!o0 z{d@s(;12ov%H{=x9u^iJ7gN$UM-LPrq1n*<#oX6FAEclxSUA!@r2xgJAPn;2kEcU| zz=W6Fa60+-1h2i;3cyVyN@9O3u6EyTD1w455G|RsM1+jPsET1Hv`bqfP7=@5fHn7f z_bdLuu{_z&f8f^#`KsB33X_?lG?k(l@*N;j-%~L{L3$p9Z`k^V#bme7viN5RKL6e~ zqX9KVC(*xDkGcCFs55{|gNa=J?7t}m$dgc!&MT^j9eL=+?q>D~2sV*FO~xpHBk}m; zaQ{8|FY#|c&@?VX1)-^~(_w3cN*!_mtT5?~F*b+vDvDuDqdz`8bl57ysG}1kZ^-pu z#5_Q19~Y&=RLtD&L$v^>RBJc%>din(%_~ZiFvqSl=l26@=KzH%)5ii63XoT)Q5U1b zqv?Ce|0myAiNv3+H!c7`3yEFJHs|x*wKyVLan1Y3rwvZk&rHA+Y|li7rePy){{a&g zXaEbRL7?}*w9W)1Qa5%J7%QX2oB+DJShxTZMen4DCI%9NbkRZ5f*PkQ#0Cw1Cg5`S zvj@eeQ0I5XdYYr}5SNl0&(md4AKYM>l#~Je7NP_3n1f*70x>x@Av?|nU;@zCyL?0c zPt7$>SxVNH5*L$tgdLK++3TekRm=N0jtF?+2|>Xl4EtTICVA+Btw))vKJuZsKmu0N z7Nw}|lMq+Xe}WY$=JHoDG-SNNV6N7vP$$o*Z~@$TiR40xua*DLCXRQ^yjBfvYeztn ziDg6$#}Bm_VEWTug}cQ2uj4P8)evOq=%^>&7dG<-5PExJK%$np5I&wEsnY?HeF$EI zt<~cG-cKrimkK3GFHPO){OYFT@en$C2{alp_AaNYhuKPXHM2AB1$tg@$4NV9>Wx{8h>23 z)(|~%skV@X2(Zs*txKm~FZX6|4$>(vFK!~EO~?e0M|<>+q2Ts|VuIuY9ili?3|CN5 z(oBb6u@SgTbC70mR^EM}h!i?5!@UvI*1`M+Xs#Z^{C#{``XP(;^(g_Xq0ddX7kIeV zc%EpI2>MCC(go?7`Pki@RS$ZwaKvF}DYh-v^FsO^gS_CWzL>fF3;f7mLTeG}J^0Oj z$(I?7Cn|3vM3I3PE92q9Eu$)S5tG5wVXw-ZuuG=G3~q(a?GYFX=w_o4f8V)nj9TV_ zwyxN3G=%OSiunrKaSC1_(2t;laXbu#ExjeVvSl0NO1kp(1nt+!;G_VLXmr%cr{LUf zPUyFGfnlv5&s1VI6A00$aT(%mBh@1@A#RWl!AXvfYOm6NHAjLc9vI=D3%gWFcbY{2CL58`pLZ@p3Tue=M;05Avb=nAU?TYy*# z6-viud*8Ae0wb62o9Z%lB7#?|4E(|@3SoHODiRkW|J$c1|Msb1yC^HVs(zEv^5*!B z5j&8n=4Z|)yF2cQ)~gh$e3crx`2-Wjh$wg6DF#NKX))u6h?4W)J}z{ZC!0!1pt`1x zjjG||RktuG0737Ch>+c1893Mll5qJWNAR=uSd@#KI*GSU-EDY?3&=#*~>`G9h zokB#z?1}`HlI6(Y4|VaNAJadUy1#uSKa02?4;SGX8O%YP~Z`e`OgG8lKcUdkyOTO zmaH*SBM{IP3Mx=vn~b2!oTkJt z@rQWl_Pp1yVD#H0Gmly!>H&BC|3!wa(Gnk{0ld2{P{F{XZ8l47%1+Ekc@4VPJrim)V2auw?ZW)17xnQB)jQf4v89E{DLN0zI&$go`hu z<+6j{L3N!5XF?ZUMry#wRiSfx90f5=3563>o2e>;bHjB%1%WCEkRP~#tJYmyyss)& z$exEJ2!Cg>Ceq!rt8gm542oqUcZw<<&gcNG$h{E%Uob30h%mc8ueIy~lAD<$2G=6! z^?Um7`W<68rlw4xi3ARj^Ap%46YgetTgCLRj}&zo1Yy`{J)qOx*9U#L*p@??D zn~Ou<0kE%J<^l4E9t!e2Uli^I;VuS4)&Fy9x#w8O%6-0@UGqF8*B(&&4RQ=ofEh*O z&CUV*JlTI^D+CJG|4KRw(ohYum2J*a`_Q+|tycR)U~>H7=#Ru`qr2m5jcLzcGG6V~ zw#>w=2)@1>>Bo)nZ?JP_>ecnt#_ZnW{Sj)zAhtjw&=v-|13QfMMmfQ@*IzSTyAAng z7!w{uphx$O#$Fkan)4u(&{?DMj%d;Nz*z}Kryu64Abbe4P`2>; z@lKzyH(IW5J)?eU(8cpm-BiZNW-`#(VGSHgGDGnT=ox88=QG|FyPWKSb1qNX6n}chS9uXbSe~9i04~g5G)Z+r(S?rjrC+L2Gp3l({ zKM358HrCK$$Nl>vJCu&I)-|(5q|_R})ijN|AqP#Sp`A))9?)z3ymm-4Dr`In)a))S z>8( zGY{~sstwrT#jw2 zTrk%a(5B8OrD*7G4Y^vaeRJa_|RF-TbH{g0|2; z_Te@-z`u;LxVhk{!gCAb1W?QgpYLvRf>4AB zgcl06s%BmiI|QgVnG{{!8!xgiz9TXe#&YGdowlea@oC(eq80X!&K*Ds)nOS-;%0|| zOEF0F+L8gM5?9x=?CQ2+cyG!ZuvjOU+3r+x3LRO`l%x ztY@Jva9ht-DO_E3qWD4u%{z)a=s}zvjBfL1lbRWOEhoR3Wp5w$?hrf&O|OOTb!kGx zMCqzEFwKL-Frl6;PW<|FWy)$!o9Bsiz~cjyNsyI$wvm47zOpE>k4Vtc`rQ9aV^_ z7Sx`Rtd9O(pdz!Q(z?8{IB_aFpYn!{ZFTJDhd*OZ z3N`DC1G>#O`~0-3I@z9A$1_TNb0#nG7Y^W1cH^>md2=6HY=72mq{Anq#^!gvy%qQZ zd7C$+o$Y-G7j|IB6xL11@|QP(-8I$C?c-MfmU>hj*XK@ksL07PWBkNP!3V~Zq-Ex& z+j0)`DaDCm-4a5_lZ`=4W(5TVC$t!!Jd3N#&GoJ|8C>Tq1VSoR<_A@au~ViaLK6S! zQxvnKsO;=)>Gl_>J*Y@Hc#(jyoRA2| zBWqz&h{{X#d>h-zJo#b5O%M_0fZwW_^T)#{t$H^R$pd4fUG^qPW_!$;z5ryx)xL3h zjA^bv#fr1tr;RIBw6YoDeIznZ4ekQOwjOpXG~mnMWRPuaDvfUJ2XR>ZPX9>!%#PBj zy;!?N9)(zl{JY$+lu;7A`7~SUyJ3ZK$iepmAFWq=RL)%UfMQAh3RlCUeZQXP*9LGPJ}B3 zIXRsOOT=pm3egi>2ZxAWdcVMTwxd334Ri-^OU*quWnq#c3kp)C_6EH%_8hT$XOp_4 zC1=|c<4Sx7VQi-TYVEr|jyQ_x_Wp=ShDL~eF<0BVj!s`bmMZ=5T;Iw&vsBV+XDZi* z5R0qLSJXE%vxcB0X&Dm>CBcS|w_lP=UMY*=#3o}(8g|WyiEXMz;Io%F7pRo{iB`vD z*7^2n9d)axaJJW{-HUi<`Tp((%ystI;5XTAH5rUAa!Pup3A-~4n^Zm3;>wtXY_FDW z9J-#vr-=}#!}5&N{6qOY3B`-(*_FM$q83-KFd`Hbl;|(tTeip|C_{1kEAiQ#oXF78 z(Z5?UT%&=HHb3pK_aVdJ;!e4ll^&h4GoKCbv6pgMt4COD(4%QCKbil;UYap>;oAq3+*}waqhaq zW`A)jC!aPbsB+^f;myoFyZ3%-7sP6@6h%%5E;!#Yps0^Q1^7D;=f7(jb%uym5BS~Y*sq+Q{ zR@kbGT(+suIz+?uhrZt^LD#mvsN+wv zp}ySpdh2(w^-nsFO!(l7oV9zx@jHEUY@+3{iyYYfwY{0@ai)_-NB84>O$uX8i)~`! zzpp?9YWOb@G1aSv6)MPnJ0kV^(eiLvfpAT_20!i$Yel8^l{g7$$|y)dtvCtA74o%- zC24`DHMQ9=FQU6bFgiqzsK3`*HTwR~$_%Ko8 zide$E5I6NjJm~s!q1F8J3c-=RVnw&AuD!ZL2S%JMy3NUEEzK_zWSlyd&Zk?1@;uk8WovQP}4dr9!Q z?&TjS-@f#>aa{NSjTFo{UeFJO~IuLRyoFhkT z4WlIj!PWN$v0i;-+yXzr-$vCm^1c#lg1pU!NURj=6&RazFjp0ZKO6roTleRoB1e1c z6CyQ{`*2R8^w!oWXF`k|>)9X-&C`w>4Dol3%&aq56!H+Ui`pWApKZS~@K?{(>YY`K zw0h@A$jQmM74^e{k1WA&bW32Lt&L2nZB6795Dg6dL8q)R8Hx#Of}GV?C>LocgZ>1% z@AL~4)Q*mn^!%C*5hUNifGP!2dL}TdI)?p$mp(c=+T~%P6-GC@@{|~Z0E5ANcGP&4 zu${7Nz3$BjIsHvKhtHwNPtBTQ`|pS_NzGEdQtwAjNjArRR@k2fbd&gK**SSEG`e5k zKljvb@ThuCMHw0w82F{eJZmxqwv*Jy$A{K+54D%qMV76id~LNC)4@m1_UFgC@+0m2 zr?5qP{4N$7DJ@%fmdNwoX`Wmn+}lD)JR`NzA9=9*zkh`lW{erlt(rf-Us5W{_bz7A zt*1HLp5!jBhbuJSGXKf9k9mRZS@u|-9D%92o2!gty{d&Sn%lh7*APqsNM zt6HM-UHUs+?}YX2s!yuN_H`2yxbk~i{c_WsWiMiL<-FEX5wXK0wU7?_zcD6J0urds zZ7T+c%>J^g`*gz|mS}2ov8CmcRqL9odg-7Io;%vKON>og26-Dio47@=9L((;` zo3qiu%x~7SM&sL@Y>w-)M@Q$)<|jSs7K!(D;RM{VmMyy9lUKT5gVAfekoC&TvEr3u zi60!wH{@VKVw{=My7Rr7Md{n)=RZw6_EWSkpIQy+e?TD|4U8oE?uCzEudb1m z>sn?#RyU(D3b}|B_MVh8pKTfa^mJHCXTkkyL-@WooR5yplgj6Qi#k|Ajci0Ia_*Gm zZN^jokDkQ@oMwNyIzKuU*u0xdw@jS$((#CTa)GT{h>JIWKK39$35QA?TYIrsp$WqX z8w5t__Q^1}SZQU0WB4WDiZ6vNuk2{fuQ>(*zBvq$ES+tk};)cT3CT_*g5#0`}j zTS^Dhcr5E7ddok8N)FepIduXqi`DXrwND$@{fl|SQT-213?;yG`nJ)nOvc;gH8iFM zK7zaVFCU_XjC#=OT-HLsoE7=z2m8-9%djT)bAtOsc&uT zh{X+kMO;l~?vvT}6umrlZ|>P_lIOc%<%bL?D9h!ZE6C!acMVv{%1_Asi29ATl8-N6 z3L0u2z6KzZMA-tXk>bRXheo@MkNF?f>s_`PgcH4+jJDVW$M+Wp7Ae8q+^27N4X|zf zNZ^IB_^2}$y$ridV5075u8TJO2Wq((AUEqBRXB_O><5Rh8XU6zx&CZ**5^UfWp9oQ zCe>%5)*>JR0qgxyUHM)-jWx@*rJp(SOpUN;0}c#~#yd5&+I~J2CA0^B8^L2@qr1ZK2v(l-MjZh1`Fr+j+a?F0e7=zIi9e{%49}!SsrqY5RCvM@@0<3)*H@!%bukcfqDdjqlSCoem(ebn?P|q* zwbV_z7A)iyb^xw4a@Y6!iT_2f&O_2u!|t$X-o=6O#TDUAYT4U4W5?+-_0P%4jvL3> z(%&JJ3>;%y>>FiU;da(xydqI8oK_x@9tU1q_;*3K<-4jW<1Kb0D z@awsm>Qx@!iG;o1R-`mqBhvJIZ8OV+B8yv6&v!x(p1u)|{4Tq-N5t!;yQLEue9~~d zh?j!TR-@}y^DijnkMnZ!%&A~>Em|xFqK=`Js2^+;e&4mFM(br+>$)DGxTpgJGDuFCl;>f;|pFk<|!oNCSIlrfr`#x=*?uyHtK?zlup`_(HpW}zFE`O!sF0b2W zluhw>dghqYWp3h|00DH>Fwb@x(&XK)c;bRtJHmq#XZ`FRQ1)gToQzb`sMDez zlFm>Ed3LVeeIx4WV-w8#>5=Bqc#)Rvv)KG+z-hQpXZ}NXNCrDDanx|azVT)NgW15; zm7{5nh+jaLGTlojk7ZMgIk?{$R!#R=6nNSrwZc`AR`i5iRM_!FM*LL!E=wB(g?pRn zox_Z^EiRi=y~gT(G&aa=^UTemOzSwv>{snH7?h8hc^)0oY~@A`XxQc#lZ;f&hEU01&uJd~Ba`r0c^&ss7S z3*}>NK0I&7Df7g6niV+p0Ur z{Cj?m<~d{O>%GwnCQ&xVFPLQKn<@TlE~ql>f`vPhLSr_d_V%rBvY>0VSV^7+gPioA zVcvb=&rhE&PYyWGOHEu%98P4s?>%kAat_N`I}un8*JnE_`Fc#uj+0iZl@C$bi2pNN zs(;7Fc+zXddqZdTEcp~ZjW>9};Bh|SMc4JKQP?DJhD$8uuHo#Qyq)!L)~#>{ z2>>6d13qT>H!pFz|)1s@(8CG-umEh14SvnVMIhBycY>ciJcR(gcO-Niknf)1Ponl<`I`e=9%~x+JPbM2z`4YHBt@2Mj81s0rm!)PLd`0ec}5cM)67{2(?j02h@4>jkt0KYN#nWLQYVfBs#3Ph zLZi4Y-0H&Az15csbd>bn;eoLW4gCzYK;O|s=bb7&5R8wfwUiHATM@BrqIZG>Xo+6F z86rc1X0gVY-3`#}{wdz#iBX!+q@=Ze*h@AdCf!=QQ5sUyRw`_XjBgF+fvZI98~J)- zgLj-ww!8*#Nei(I30-oD1ge9j_yP8mG+0(MjpCA8`a(^dR(-F!pBj3Rlk@at|9D?* z75gD?n1`s~Vj>8gPsR3E#huaqt*x`)NkuSbxFiysVFW`~xJr>aeV%+uj6Csd|9F9_ z@&5&!F4Ht^65)h9G;dc0jCL1G+=YdzcD}_&+v3SkIt(tU2^z8MeMGIFI!vH)ppqHt z-LBdpiokC-g(b$MG#|jLXNkHC;6x%k>9KV*wi*8a!7nS12$EO|$;iHmZ`PBNS_Xm) z(mIGj-96mxwf%opieA&x%XF8ckP6LRqOgbI_YV!ltWZb9)m!B>ARoYnop)TS8=)-= z>3!ZH6^3KH=5xdo8*V8>i-e}fo-jxsrDXa zEEGlxSk~)N>@VXtQuVZ)$ zZtRd-+iB=!A=lybq|7w9mb|u+ofvsH-{2HG-*92}i+3TeN2@l)$6Mqu^(_;EZ&UQi zCpjx4F1-(jHXGm5MUi=550ZNRW||^2JVWaWw|XJqDpsu5%iFs2WRAXY{E)4vK|R6Y z`qX^1-rG^6xpv9!i9>gJIjS@WT~+VGIs29C1Zmt_cpb8d_&mij>s`MiUd&PKOxUu_ z=NI?(a0m2rpKL6i3u5uos~yD1T3Q_lcWzJhv)9!nJ{W#>F7V`~Ri2inL`W@xfjjS) z8a)YVYdIUn;kopkYu}q4?QBU%b6KCW8Np0Zvz#m%zsUlq9%F*zaqM$N8F&qWIp59YVTNU!9W^9I3#Fybpk0 zg-elEqmz_E|Ex_aIhF^gxEyyFM)of2#%{+~f6ld>_-*W;Nyx?Mx;sS%Ip2+C&y!!9 zmGYB&Z^b|%;Js6A4U&iun|go$fbAczt%UOOa-;#kNM4xsZ6TGnf=nL9XpN?!i)>9{ z74C1@tA_Yb5L-k??}038Y7TN2&V7o--Buf{1-m1>kF@zhTxp^{>hrLyH!)_XxTHyf z5cTGZyOqerGo6uUFSs}_6Z^$hQ&i%Jr;H>qpVkMBJ8cVA!35*_7eh(hCBNicoXCq5 z=3dRd|KKb)!0YjGzu`crA+r_6d8aqI&e3@cFGP)oCWGRS$9(%q_=9jgmQtmQ_~-r< z<>HU(<>eJsqodVk>&70bM~;eiis`$;QR;dlnDZ*$-rilx?6MZ zX-1~6zr+O5C0DTM`K@}E8Wu6@bH9@2A?$MQ6$7oWlsHVvhUsF0>lFVB@>;9k3v-os zO3!}S;>x$>0))Jd!Y6&}dDk)9kc;CR^>lS>i%c*Rg12ZLAZ!>IL3}nzGM+CbKUDUt zy(_C;cz`L5ysg(g+0F$^CA`d|F(`H>;{FCwM&XqxnDEb4`s2fV@X!A9Z5%+t^25S0;s% z5rVN2X4PV?Xum+zos|?mmp_H9mQ99+XF>u_zuycZy+v7^blkv?OjMsRFD#4Rn;}&F zS;}znBXwlNW#^`SzTQ0d{qUybYMgP41yzK#3js>*-wiAx26JMJ{DXeM23K=9w7>UP zib#{j2+Ll%5+ey;X%RFXe(C8dY(f>Pn=iksQI zkn?00xb&|t@`{c~O8qa$j=k%hx9A#N_M?yqzgDs{@Z~o|tX^4z%eT)gj%o7oBiPoTJYap@6pf*iLjLy?^_SNiGSB`P`2( z`*DVJ@lP&sz*s?vDY@k@izWhvrM+%xSOMol#c?J4BrpPWGEV*YzvLn>3=0$#$S=Ax z!7D+hHCj=NoOxTy;qZdRrHhNZ8-GCjsczkHMg7MD4ROz;YbiCg`1ycf<59va=W3hz zTtZu6W*sX55192$!$Rq#>S(6LY*%jhl&%1af?scrj*eK16ZIQM6hhd6`@F^pfiO3}{{3&fC97_IX9@ z1RTVO)>P5!LMS&nM&enqtV0dKC9lCnMcMm#fI)j!)KB#FYmV280^j-lBluQh^^I`& zknKxaX_T-U?SDVHNV(;jE_-2swbr$2#OrhK>q1TzH{>Eqd%w$b_^GX2a@>L&`_~as z8cR_$puJd%Y6Ll5hrxdo*56V8#o&5=NQKV&@K!T~t6H4B-%QlW=`1Ybk9}6PxB_?^ zMH*{5?!QhS5D-vsbcKcEJW(n!A%E$Qhad+#g7qvEu)*M3HVcKSV&$)?v?vu30JIltrTsq-_EE~<$b6?$CW;uZ2y+LZ-al2q_4F2(BXMA6 zFU;)ii20wz-0d5dbaBU@sx=WE)P-Z+rBB!Ul)g+kEmRtZMv#l)YS<|%e)egZ{ftrt za4T%YxFg4UaL;&QHy@K$We<2!`<1{y+QL=CH0kX@%G(-Q4UK%43M>-8}rSY^CyVx z($zd_i#Leu@1Yc055Z%y|M-oK;PrN2%9G8edN@;B@!fk}zYN}9P>$`S-t2;t*imbL zv9w;K*|8(Uj4Ypx&ge;g*LI+V7fy9+HW%#2LcD#7p?Xi$tC8S{?$7rS`PXEHsn;pSFsH!K22$){M}ftVUA57pWY5?=dd;41T=*$^HH$o{Pt z`f59hdDa54*gQoojEr*Js!28QEX9fHroBd_0za;BgqiQBZD5=RXR59usQOWxQQZ-z z7={F$rMVYNKdaA=wl7(l(Y_^Le6|u1b>TMv8}?TO2a9VHtnYTyMg6K*urC(yq|~i< z6YPIVkqEfx=Bz;#u)@DS;aq_Y`At{+qZW(A5zsLJInHfY*b@8h#)hd@li;SC=u@mT zIL5z86OM&a#WW`ANm)KE-p9SBn8h3CS~n}G+Nz4T!H@^R!QnpJS~lE!|=P1=_(I0P|8(-*)A` zvjcZ^icpo6hoq!nVI2mZ{aNB*P?B#5j+13iOlz*O(d@eh-*8HqT-V(+quz4k>~ntS}T2mc$At>+AYuFlNneb}Iy#aG2&Txe;LklC#ClX0Vmj?bY0s^la&&Ff#*X@usshT`x)i zJz{5sgvz}|4VtH=)k1#@s!wI|CoDxh-RF%6G2wah=|<{nS2)Mwpwh^wdg($|0Zt&p zz{Q--%zUqbFu14Y5lo;Avr@F4-!pe%$L55BmhKmwUxL&4o!15LiDMb?-!y;Ds=Ef6 zC%`Pb$F!MkM!g-UZem=vawC@b`0GR@mYcVA4r?JD9jA0Gad|AI8Hv@5;<^gI(snX% zp2FTcmVLefWf!ycr(AaQ3C*ta0b)N@s`3Ty)oc^E3WltIwyQ#z4l?C>qSWQXe z(RUDCe<&)twVGV#f2Vi;`YdUb=C|HSo4Q1V+sUxeD}>0;WjFTXDo>?3DZA69h&~pDNMm2@D|B!>ZABO-nMG= znAEf*Olk{OG=Ire#Eidw$n{;}gxe;x&qmPy>>~mmC`J+@n4dI0#UZwjz-3p40HNQE zYLj5*gSF!JU|ohwqxGy-JIsiAVtEh>^I}uu)7vjarN0&HJkDIFt0?Ac-7CqNu9_uSUx@D{Zfe- z1MJ55bN<4Bf{4SgAogpoZh5eV_J&=Xe7ASLuo{OVPoMFMP1qe+{`rvsExk`-(rVGmSPSKc{7&>G^fme$IX|@6$6@GyzeRYl-ct+Y{ zcuL=NV_(*rLQATt9>)j?5A!Wmm!CY5EMrHE#`BfG2Elh{McLp=U~yW{d_3`vAQmpx z-+)6k36-qMM+t@Cxt@ZuOk!QB<)pmSTs*^Cf83;^%k2a1ZRI;jbRor>R2epW799A4 zmXnPk3o>eU`VXK;@KLX;t1CO(vwQoDRq(*g8VZ@_8G(c(41Z@LXGiWp&XWm=-Q=Zs z@S;jd427hl)1Db72^FK}i+Upld~lPZdWs)VUJ9Ird5iUZXU@A~=-I>PatiX~G?j0@ zpewZRCB$_0{6Sfh7ru33(V(+HJ6BVx^S7>oI6AOu@7N#7!#3P%R^t3X_^;hSyelZ) z_p8uZqUpr zco~ohxQv$a&^W$$?!F%Lg8YFaD|gN&E+AWtTaiF?g} z2WG*wXZ20S_U^P}{pZjqyXQr-0S#IGWH*1w=EbT9McTFwpvC^J#gdYjL;^j4JZ4jK zkVi2wonC|dryApUcrLDKspdFQs9kWSOFo&cte1`xs$J!hzJryZX1>LLdiZ3YvVR#9 znvq{mCqhdXSf%!nOcGdCjG(46v|O>Be}jbBp~f7szB)y$_ofUvke17Kft*zk($lA0 zz^REk$#{4dYel)5HSXY`->1FgEK!56V>l~IiG<~5GL-xi4&F|9I;wW0cvD?%GX}B} z{*dSXeseC7)$qlnJJ|XT_>V85hc+`ai_?sc|Kw9dh6p^Td?&~j>VGHgg7=Wz*F~j0 z8)SE7wJf%x1exOK*xD@I_4D|1r9zDJy4?MQYJMOrEbLppasj9r+Od%k=6F49_^fuP z;cQJ+DjhUi3Rnc#OY+=BgqN?QNVM~6dZ%!3T6pl!ed!D~$09pgXn#S>HAUX0A(JvA zx9| zTP3;z{$y*O4X4)U^k7lfTcc47%9(5PyN=l?5t00ATHWE*-Jybbr!mSYXO`2YPtK3pLsUdko4bvZ6hGE?jlM$u{RD` zPL_Pl;_Y_&W=1&LRGPj~U{L2U!x{qfyf%%8&I9K;g+v;wm+-#iAn9pbOBf+Fz`qFm zydb0K$?4N(XZ4l?m%=Jm4>8_N%gSqKNc~WoBuU4Oy?s|!L`MJf={KK1szvmQ`$xK+ zHImhGc6KfZQSON!{KA4Wzih{0yQM}6X5~%JRslMAi4$_XmFMh;mBPu(+s(n;%_Y-| z;YkdXL2)T#!>EYzw6wGi+o$GUDKIe4I5nw-@vwPp=G5l1CAdUq!G)2KK#6~Yx_NWV zY}j4Tzzw&O5oKR4%zlzP0DoII!mF2rV1Qulb5Rssb6bc8;*v9gJ5SH6GJh?4EYqT` zE)TIU{S!!@LyO*!Z$P%Ov(ac7Hx$$8USWc^G<-GmLkZSr99+3|oX%T0vlg^JvRr6rg<;O+9}S%k)fCn5Zu*X^9FE%n$ro3%R9e975%? zq+)!gK@f@a@`}IK_IVBBpWWKF!qJ)&M*u?5qbo{B1Htv0JmfNl!-fzA_xb2eghbWS zmvh5NVX_Tottf6CA323_9ODjbuAV64Pbf%XJ*_k>PHK9qiuTEWm>5gTf;~gzQyQjH ztVlpgAh<*_nw7_(TlQAR{Rq}QQ-KulAcX@A(>22FOJ?QEpN3vbrf>j1(KPKzjK8lr z<&CoF^$!-B5-&ddd{4QxkW;a{&?KoayyAsFM>n;VSA2AaNh0!M#f|{W&d7y74ci?qmy{*;Dz;U)a z<}0_>TtSaU4i5J4#i6czxV{ntGcWh3(!Ep1-yQcN}O2pW{?{r%S{d8eC zv-OP1++3RY#L75$!t5XkS^EiSSIQO!Y*Yo*-X0cV9~?KGl@*_HT}g34hsiXBS$P5{ zX8!uAFNKR6IgXhr@Hn=g^VFm-&Lw87G!p zaW0;8zkrQ_Ru(!#u-8U(A_-J&f4yL;L_vrKk}_Tfp;xB_ z{*|B%;c9%UW-a@_o#;$OyDc}N6%=v&$63Dhri5r|?Y=JZ} z)cJX&aUqFs6E2g6krpN0G=skZP^@YpXlH!QldThCL#pFPp!Xh?J5P^&%I1Fj?HTv9 z%r(t#-wBICZDPK}ieDPlX3@48Q{^iBbVT2=-BMV|t4p)qAgxR{564ezc24?mi7eT# zPh$q+c|UN=TUYQYssU*b)3{(k+|=lb`20ZC@YAhq!&Jm1m}Q38!XO}j zJrU#iPUm)zdFjxgogkh;QSkz~K6-eZ>MdIZV%o5BBFfX zZ>PWPXeU5Lqt?03!!t!8xBG=Z0-uDmO$#SM154d|_Z52ZsTAxh=WhC|OPH&<^s~#+ zvN&?R4v>e~pnQkDgk=8p8{w*kCAG>n*d;*}3?>}(CrSQR<1fb%Cemh>9D`Wm7`aI@ z6YR9shwYVu9+tYe6DDU7CebG4Zk2owhJ)$&aOCE#t`dD!eStc1=w#Z2N-R?IoNJKO zr;r;-=;OB91R|D#HbT-~YbzN5$usM{9jq(+2j9z?S186R8iZmg-T0zOGrp} zNec)95>f)vHFTFW(jg$-C5?0o(%lUrAPv$DXKnC#-{+ja;mjBD!~AB?UVGi^zONeG zXQ@w!{yH$y{dH(td<4A@qxk!G1cC7Q_-{`hfYk|*@)VCJ2Nes&-DwmOhjxvQ0&nY0$E;6z zD3;wi!^!Zanhdsih~SqOdf$3^KhUpOKe@TwphMmQy-bDQBrhTYtQZOZIWh4V+wx4@ zjam9{xng&I;_VlI!)aEX z3tnu=m_8l<;r-l;>ve_wqvK`CwVgPtVr^Fh4US+wa;3 zwjgEUOke@%NXJlKB*wSH?+<6@QY6U*2<>266Qmj*Qbf8jsUNsA32(IBf0!6^qKk)h z2xP!P>>>f3aew24a6&Vfb*m7$RdjE_?_|ypD0sKgUF};U!$9o8Uj;{R_=2FyY zQ$sKq5m=FLXj|?$iRtUo(QZ;|zLx6AVt0<@KP44&L;`owX}=wkzmvhWyR>%xlV)&t zb%612g9P|OiVAlJu@oVRg#~|CaAH)4^NGDPjwl$OvW!Qvf6G_I6AD^spb+!Wb4!Ft zjnSS=n-@hJK<$*^^{FP0?UtUyhSOlPXJo9y2Q>h0{0xy~*$-Jn#~^@u&ZvFWsV8j% zhZ-{ zRDz4dTwMGN>t8IqlSPT?3eR*parTdH!V(&@7rR~Mj7^w=HwNuDO9pDo>~653ILDO@ zEX^t&yA66kqO?1Fd3iE%I4;}vE=P9#s#`7grKTR}h2t6D&2&hB<9@BycZUwKz{+qS zaooxf$XCWMl6jju>wpkc-?W+xfS$ZLZm&fesytrcyqw)e;(5s&?-R+ZV1 za1g4N>_wgCvs(S{rNH;AkW+MFX1iD;ITJ$;*uA3@F3M}Upid7t0}44aMZDD|0b&oE z4zDE2SA4cv>WqlPz*2-B4U0KpuO(|t<{hYZHnsO1YY%zOyeF<>ceuu7OhjzpTE)Ly z0|Y8vZ9%bYRn(yOs8TORpl!^Ud|W6Ztk*TH4_CAjiXf2%Cq8CAT_&bw`1UO-JPLyK z)TSBlpOK+8zT0IBy=wx7O764T_u`&e{b=FcDWO4f==6r#5HVy4ID($_zhppE-868j zFfH!WvyVj=EYWAla~Z4OV~a6HBOo$WA}YshT1cqyCqrSQZSJ=XBD&7 zYExgCf4eU5JXu`sdWS&I1Hl2&ioK9DIUOB24lS&`U8?G(rv5}f5&oMH`iIM}XC>W5 z-I-_~pTYl^uKd6qaMg_p5uZQFlr8tE+aAjF#CQVId6PcQ`w6N^_JH8c-avvisdj6- zD8vTY0->&r)vUa{P10Y1t(oGKau^nUo^f7eHM44WEFFkapqE-cXqe$Fiq3Je^sa9S_ZI?zm!KXoQ{1)Q>D>!0^Y>gWpnzA&E;3)zWs(5DGUIx)pSrUQe$95 z!X?e0D5&UBZaIl%q^PLic5(1~Jz4w8-Q!1zr)e&=TtS@;}A zq)qg!DcKSyibk&ke7;^+nH-r&%E*jqJhf#*at^x?%%s zUDQZ6yKzTRQW>94mc9I=a>v&jV}*2k*$WTH)74jwF%6TYC3RI}OF6_UO)UV_Y;z3^ z6`MA0fIaT&;{H<-_3Xs&`)a?G;)%cX;elU&cKM;LThfsEG!=P^zQ>1|(C>hmXI!F| zWh179zInqPF`|&i)lrh_VsJ3d0Bl6?M9c@;-wlSzQ?vGrx;$Nj08@t2aZi;f=24KGU0E;neqwb=kET?^!Lie;Bxky9)E@yaG_Z;mOPO;X(pV^t?ABKkx=4 zrg%A&1*v`4hv|3tVk1!oBwSmpLE)WyX^MQ(^6S^LymvX3qqR5g+Zt!?*RG#;uykGh zG>}|CZn`RNbK3cpU<&5hK-)T93K3bemW{na}3&1JuPuR4Zaj=U|^iXEYs8| zafquTd) zp&}G+ju%H^P}@`tPG{K|8qa2~YpSY9r-NRb66on=|NPmQ*1M_)D(s%#I95sq^E$rc zocF3VCKZlOj;|dPINBWo+;3K-W0#Hkne#OEh&7jX9@qB+?~V1=DSU&480dCyU6pq2 z{3T7s4DA<;jJx%GSBfN`wHhz8SAD@8&^dS4(9NRA@_8H;bNluOS7T7>JdzipaCwYM zn7gz~uZkMVp}FU9sz1eoEU`Na96iwmSo)75vNCjbljpXM$yl7K)j1_+l9Mf-5bhg9 za#F@l4#iPQ>XglVbmsf0R;+NSChk|G+dVzk4Wrvw>*e*mNTIYrJ`woy4ICu$s`B%v zQlJ1XbF{xr%uNXDJQb=GS}oGFJ9t9vo`kH)+^O>FN7l!-z%o1aZ}gg#ikww}4>_de z|Nbx{oRLuoZV>tLMAsd(4zR1}ju+ z=!U)PpHfgz=p_>OJl5R`w|QhfQ$9xM-9fTxUbPJ*CBLdV77P;uT&)uu{%8B&|Qt=edz`b4!gtL^EloX{i<{9n7W;f#LiGC)*dwer}u zQuuefXv0a`NZWDq!*OQJ&~Vh{4Hr!7fN%;u?!;#RU#vr+G*qp0{9JB2qb%NV(s+G6 zS0!#zgchg+mP=G0{7Xt<1r)&Mowj#Y~lEK+7G zMyAz@Em4a$XSrNb^Gl9DC7ngQmK`_*>UR|y-x&L>BAno2Dwx$t4fR1fVa*%fa*JZP zDj-6`3!5LLA{TD@XqH9y>(%}C&a@Im;N`WK6t6VhjckRZF@YFFCjhG+?S?enOtYIV zLsDp7Xfp1`zJ=Fw-{A6?eKjD^W~I@+x!=eC>KH*hm75^&!Q?D-KEUjCM(6~tRTzf3 z5CdOBbxz}v1YCk(N837AmB|>N?T7`aPwf<(sknA~zbX63X!|vuIB384tz`YTUKJs5 zvXhE-lb)gig@n66tBYH>wWUHkCDLSJ8-vpzxaekq@qMZ)Mef=FzsuJ)LIig5|&FZZxOx4^fsPp*jRV8bF*ig11N~JJ$HvI3tWN_ z@I;&Wv>k4&Fda1GS>h8UXrk#Xp1UkxX|wj?5twy;WWq6fu#Lbm`A8(D^}E|ex5L6s zDuuh;VVPe#919uK?+$?J0%M=)z>em5g)GrUgc8>r3jasvb?~I2)X)M?{LhgQ5foy9 ztw`8w2R}O!&E&N&W&CoVygEu${5Ra1TU$jCUjg8WnYe+hM5zQjl*7E{07g>p-pPHT zKUKC#Au@CX5hsD~JGbL_-29A*iVAD^dsGUvVUTDlLeiI+s=XKz>~ueR`}XZRXa*s> z{qfEm-5xxh-k;t$g;EV}c#Dzt)0eAz`}^p?P*~%9))Wc4H$4OWo+;LxHi%Bh5r$i; zLqMg@V~*?qx)yl&25y4;x-dT^Hzj-y$5;FN{awJ0v^;aRAk}crnc^(_PxR8F=FifT z6Yz`=l4NwyfnXUtmA*mlW1uB6P22Xa9s*-!+4kt(QrY2zBe(AP7G#}K>7$*0Cl5y9 z=M(Nt8zli!XRQZzzna~-Z$k^_U4{H2YB1e4=%6 z<-l#tCef{VAp-n_xM7%mp@-Y?WVRcJczwK^qiGpzW}|DBI~G-5?3DviZ#!@L&ix@y z1q{>seV1qGxOyq3wvGuO=`O=0hS%Hj^PV{fv-y(Q-=qV}1njSx%wqR+zI;Oe8 zKe>-6Ad20oEL1h1auc87YitVm=iyKhTjKOo88Hmtbv}7$>oM(YI7-t%lE`BxWiw~c zmu!A=N#Tz&r(Ack!(d&7wL`gP_GY0*8Z-{+HT=L+Yp)7Jt+nO_hTaZ&x;SnvY? z;C1}(c}7hTf9h80qeX#)pEg*Tpxghcj|n`7l;)7 zC_8l|T4&Yyy$V&B-N`%(H$p6+$aYMk&j>Q(I*jU)CMN=UeokC^U3 z7uGXtprsA44^74W{&7VLxz(P{;7JYq({1q|kICl8vt{EmHKjUX?@vd_iB?$MA*zz~ zlGR~*Dnkr0I6fo&hrucsz?aE9JnB|SsD}>d%F!aGa#G?Efy-n@n2Z3<9J4adNUmAp z{^OHpzzMWt940ufzKgm&Q!!#1!~A7j&EIE3MZ%W?_>+R4i%FpI1UZXKNWXXVnNwRs zqLDfZ4T%PbY(!$B?zC@0L`0ge2-Hf}R{Re%8gV~uP{a>u=+`E2v~>Y|Fg(TMT+&M& zPP*Z|e{NJ_lKnvq0lN{Y;XqP!t3;@jc)I}dWYNw_R+ugYYC;;MC_o|N!M_uP?!On3F=+2&7p`yb=LnhdpS@W?1=j3a`v2&i!1Gne)DY6qlS%xVjm9{=@? z{SX6@TZN zFD^h40>9`HwK!q`#fFu47czw@sgaNnk5U?FW9`-lE%VXx&h(}^PC zX2vD>6ZjI{!4H;LIHSO>+hMm}UuW{Vf$Te)pDgR%M>nya?MShNC+$*ud-h9SHxgF@B@LtL)K04hZePY`6yUjj@NV*E%TGvd_ zMvo^J`q9wj$$-(gRFtNiR1aTg1l3_PTa%;>zKz=KtIosS3phmEC8Pv{N+w#AC8uX! zWW~I#Bqv?ljVNaN4Eb(oPE!Zly-?+cAbiaFx&;o86IK99CkNV}k8J??x{~ts--{9u zs91ibT)F(`4^T)jy+l4ioaIb*-C}mTX09!-)_HDhY1w&nfrH?|RnY8p+oRZ&tU)E- zHUS!AaxzPeqrZNkXKrv_H^7!)mF>pv~RKR4p++ zy1G28{p{OE@AHM?%XIYL0f|^i(0br^hj^Ua>Jz|afll0XsD)!R0cJiCYKzQ_iu9DN zX!g_Z5AMDk~9zeW|Fx5R-CjlAxT7>&@8uR|{_a{YN#lUDh{a`;>y|^B#<-HvI+Vp;MgtjS9@eMWVX7K)E-U1B!zqu zR=nCD4J9h2c+9})44c)?%oYqYZ6=B)By`ewV>YRv2Gq3lc5#s3@uNwKS170ALpr`j)KD8x-+QvLKzg^P^f-PG{Te z1Usdj!jG4M2#9#(9bqZqPd3J|EG#U5Y=EZ)u=s1I~7ObkE6&!kx@a#Q>{A8t{tQbj(nl&k1f~hLncF$yvmZ{@Hv6i_^ zvRS`^l#KM4%P43;ZDus{9OsC4#$`U>@rl~F_yK|E%p21eK}%pCh_;2@bt*Wm**N>| zp!@A(@=>MO?Xb5wP`32qVSb?s@Cx#tn2ycYnOsk(ml)I@myZ^Ms#=M7Kn0}Ta~VtF z#Af4fIw({{N_UjOUZ~}ddEk>(VqRz$z#U6Z={qOj>uCjphlhvsID01t73w|oC80;5 z+gT^kYq>Prl`W^;>8~Q5Y8G^E{}6m~!?%1KoWeD9iURc=v@oppueePhS&W<|r)5I3i(swLHxZZ!{zv8ObRL_$tXNe-e(y z)(@cZXv>KK(mQ8SAi|=A;=OiFC9}GtLv~3`JCSaqKREaWw`UxHvV8H(Lw}HT?{6*@ zNZM*#*%T8Mdj~jHO;l!qQoymI<6`RZk=Gh%-Zl#7gwBeER1oz=p@(dWo7@V?O7?~+ z8BWU)P?(ABkWNxmSq&xIJ+IJl2Zh1$U~zJ}y4qT*y8^W`ed?7aIpb9aP0VA*HoObK$Om!hD8O2eG z+B5%m3r+OuRKUoK8@O|iMI@XE9ouAww#2UhjqipL1-F^hnj9w%V6j9gr(LIeV6TIW z1yZGNvveR3rX8!y?`0d1UGyZo;X$Qi9goNjAadILF4r~JwT%^@0|r-b09I*aXzczM zw^m8;+RV$*(YX@>Ibh26uWlI-q?Mw$yY)){=-0<;W@)e`n7TAAr}z{RG4{gERS%5I z`@k=*@6;kiROh{CdBg3Z{IDznLvgg=QSjwdyDvW*g&FxfZH7E$b-Y++H#`G$ag2XX9&g7PvUKRGaMo5+)hl{SBR z1(m-&qeU`{{tPvCyqi60mS4U&hsoZpa1GAK_3m${t92UagTf|Y^qBrk8|ePHp!x>n z>gn9dHF6&{e@%p>&Bmtcla4_b+U24rfkUZV<=g9^LuFnXN^hmokuv#aFrgjwEQ#T% zG-D6_84efGt`2K_u7g!j zic-!3z*%o-AZW!FR>X%-V5-qz6HTiEa*h%LfnUp-fP)p*0VPQ5wtO-$^U0MR?uK|lHz2JTooDVIH zqMB7b0d&V+=;Cp6T#(#^LxO#!)#;eBqwL;*=4R3=x@$}}@@|$5qe}^r?m?Ya@J7W% zIag#96y`#H;>d^y9gT+j8F*y08)#JolB$WOOgk^uOl;Ytpx~4MDH8kJC5dK19WA65 ze5sLp&;XAe!;KxHvo5F6)(J;|`DB zW=hF_K2zlo23qG$H8rRi#XwsugHZ+-x?XI{tBn>x&K7{(;DH>CJsR*#qSavBK|!-W z{dGIKGn-__F!nk#AS-cCtrAlp4FiJ`Q2PWv)nqO75($=&e(963I~ALzDP2ju&b;$9 zX92iZI{W0((I1Nief`kz6O3xADPMsDNQBwBE3!=?OA2cpZLYOi&6=!=nvz|qKdEOV zB2FhQ?IoQuS(V||S7w&ggqm{~TV~m>r`$mx%M#p?e^?Hu!YqMnTaA-bj$Cfwohom$ zn#a^}o{1cFDU^kU1==Q&+CG%ym3t&^G@vJDEsEd16W?*uuf<@#_h$0jIo-ohqxUFL zWi>_{90rd=-~s79=$l6q-gT}uX}^hA-X-b=!X}`~$J#aYG}rJ#fC7j##$6FrLfR?P zdA)y|-TK5K%9qYS*LEqIPK6C4=XpqCd2pL(EE${es2qsYtlJt0h)4kdbHwQOI?uih zz~1daSTJ~5YyEFm#VHR84c_0&1E|WV*10!aR+>~m_-j2MKP3}QC%}&L*0&h|HrxGA zu=ZaJVHZCZE$)KdNh*c$MQBpI&}cmX+{TdL${glhv>@?@A>pRD;zy_W@#23&yfqJ} z3UNpXJ27+q&N>-Tn^^-z-3b2sg=%MqG}2`7ly-!s40<{0>1CdtvDAbzN-Q2F-bVkP|mm+?5PUcotGa5hc@QV`O&cD08rEe zJGc=E>FE~`?SU7@Ln6L#1@yi}dvkU65ym4qtW}VpGdGyl!WE+J$vORoU@u;%voAfN zSb%aD6MS%Em(3=PwgER7Dxd$pH2sg+El(%3`#7<@quq3*J!Jcq8XNX{d*ki~j6AfI zzXfm$+d=@vjjsZ0Hjdt5&wuAQWR}iRWKy=1oo=!mv z^sGN`=WThsJ9%w=vx6vN!hmz8va@RHmb{pC#d+DaEzGSKu22jGX$?SogI2gH1CY& z!2F*8#|%K;9`U4=KYyg8q`Hq1gZwYA+8}{`u8mIbFci~DWp=VN2RBE_+Ee!2Eu(=r8`+X$Vs@dXkciVnHv(PmEO-L1=+0jMgWS;ScM8|a`0p}fAnwm#bTpj?=^2$Pkx6)QFMFh<}RfN9g-?cFd?lNq&j_ zebExSy5Q@B9Ey!;>+4xn40;I)yil zuXa%{-xyqpfaweGtljd=;Mx_6jBNCVzD_6ct;0H?vmYw#K)znQdiB$dNe$4XxM4gv zvV9g)U+Dcq38P(h@<_qC7Nh)wtUaSDClv$yns8-w@YNGN0F@Djh%P_=8z(!L{4!s; zsQls$&gh;BCe3pTpf{_-;OFOm&PCIiRl^V9))!F0TmZ4j|Cka*qr3VVAu{Pm$ZOCm z<0N>SIn_?Vp)}&KRi7M&hWm^LP&F*X419?{-!9bj=)^n;R3!nDZch1}zOOpaJwhU4 zP6A0!i3uxo%D5_h;oDeuiBeTP$FxY7H=I$N`Vw%V^gLE0B_ne!P%O&fX36h0?} zppn}L<@w!Z$a|KgogdF+JO=~zfqSw?Q4=)tg7e^6bED}%@}`p@kcapRq=glw{a-@( zKDnPD{yXE^c{`q+kNxekIHbn0Z|CY>2mPDU@m5cGK*?WWoXFCct?7uO8^Pw>&SvEw zFZ;I7^e!E@g$p!iBtV!Hy^RaBC~K8>=$xppLSjN>4DtlPjI56~cK2U3)S}~KyZ0bZ z$aG2K7tNQt@zxDV|Lgdp|L1f=kKlbJ&k6P?2={tU(W;SK+UyLHWA8+B>O~YZd>{~T zbK1MbCL!SIh~UJC<7iD_T`q*biS87);9@LIK!1v!2|J#KlYs{(nyw58pON3*oaLlE zuU0A<&EK6Z!t+U=$a|-PKkD%cYP=+DLL~vE0I=U(g`SR%)1m|&q<8y&7{Fzg>8FCj zhajIMn3w^=oB@z)3@9vz#r5?U)YjI^RZ96QZ(v0b4H@=zB5Hp{6!4H{Y9d7&)4!jJ zzk%Yt|K$OJP)eUia21hK*;>2=fr=KOXR`<;eBqBm5&`(XWq%TnFVyFU%y-ZB+VP!S zBp?u?+xqdE{Z@b_xQ=c2KOIJW3NVw_$tDA}THo9n9+9~NZ4(#|pBG%pG^Pk@L3;r3 z7<1(yZ41yY0O}os@wec6l3N3X0t_GTv)3Mo99RaOL;MV+0<(A0?)RBZ27_r2D6D{D z14?F%*xOxZe9H%tr_cDI#7}5>$beLqO`~+3VwC8UrQg94Ndxv+=;s^ib@Al;}?9zLNymIiTr4W)GN!$^c!(K=|bGqm5~+ zwLvm&$5YFQ_Sf?-FQ=&9#-(pkitB~q3M6JwK>%jw`o9a|_3P_}`2Q}ug>0GSB>4=D z- zbAG@oU1KH#N!Q39+%>12d6wVYmIFBTfxZCDvKqhJgI^rKB)H@TnuDLMBO)v;upI=T zzViEs$kNg7ak!|7m&Rc?{5fQnk0UF?kY$#a(si`?o z>}b_|FZR#XWSQByJNNePtQjS(?vC=%39Q)VcDJmA6yN?Ui#10lEVX|%NGXOKFO)AE*J>um{=f{sR$<6{}u_g?5m2f%#qh66=K$liAJS~Q^-_`3+E3Ca@#%LT%?5$Mb6y5BqJ$Es)qM@;vXlU+u=&zbH6wfFMx1tu zMgW}Gx+~?YDRp#O1w&ITa24FOf9W6nLsXWp>MzD$UtQ&%%ug`Cc`DR|f&1MD3DvBn z?3ak>C;3R4{?tKN>Ttl*{sbbS54%*NR&j8UDT$m`^51=Mz~WHo2*sngGxv*cfSrs} zW9022YiSt}syZDLZvrX`i(#Nnh)~*@eIOf2C=p%MHHVT!8(alacvn=8<-hBC{jbn} z{uCi;(Znx>9u;|{czrN%6blTM_+j(Y(1HLyg4f&!1FZ%p*xd&p=$N&+!SY{Hf=L)5 zcOp$Un7ew8AW2$)6x(geKhPH6&-sJq6`GD*YxgWPR7TCLb{;`?G2_<=2YDhvndtJf zvR0;RE5H)9M_;Br4WUo{$L2z6psvo&U+2Qm(?j|1JkAxR?d77}9I}KYi^EycaVsLA z9FtLl&aX=29SA*?n@IjQ6W0{o0xfxW0#3B(_miK9xPQxR|Gsa#e|mPdUK~cuPy3l5 zstCuo@n-P}tQUQVL3Q8lo~eYKT=@00z0Bu-09pt1eFCHq?{-t}&(_>5(DHU46Y<*e zVUV6sm*{`8-JU(G^qTsdyJcOTeGdUh7f;DMs-g9k&uhCy)1kkiR|EmgzYZK)M(|2k z_&2ZJ{TFoR&Hv9EwD0!Z?NxwMh5YXjyxmlQ8G8J$n*4je^~1Y`y!$vXqTau|?tgC& vn7wxgb^Uw0DD2Z6p#J|q{&q3mF5f)t`!bhk$@Q@59(YNL$%+;UYkU14wdQZ* From 71857ebc3f410b918481f4a6bbed93f1cb2eec65 Mon Sep 17 00:00:00 2001 From: Danny Nguyen Date: Tue, 28 Mar 2017 09:17:09 -0400 Subject: [PATCH 91/91] Move Atreus50 to hardwired directory and update README --- keyboards/atreus50/readme.md | 25 ------------------- keyboards/{ => handwired}/atreus50/Makefile | 0 keyboards/{ => handwired}/atreus50/atreus50.c | 0 keyboards/{ => handwired}/atreus50/atreus50.h | 0 keyboards/{ => handwired}/atreus50/config.h | 0 .../atreus50/keymaps/default/Makefile | 0 .../atreus50/keymaps/default/keymap.c | 0 keyboards/handwired/atreus50/readme.md | 16 ++++++++++++ keyboards/{ => handwired}/atreus50/rules.mk | 0 9 files changed, 16 insertions(+), 25 deletions(-) delete mode 100644 keyboards/atreus50/readme.md rename keyboards/{ => handwired}/atreus50/Makefile (100%) rename keyboards/{ => handwired}/atreus50/atreus50.c (100%) rename keyboards/{ => handwired}/atreus50/atreus50.h (100%) rename keyboards/{ => handwired}/atreus50/config.h (100%) rename keyboards/{ => handwired}/atreus50/keymaps/default/Makefile (100%) rename keyboards/{ => handwired}/atreus50/keymaps/default/keymap.c (100%) create mode 100644 keyboards/handwired/atreus50/readme.md rename keyboards/{ => handwired}/atreus50/rules.mk (100%) diff --git a/keyboards/atreus50/readme.md b/keyboards/atreus50/readme.md deleted file mode 100644 index f0be255a09..0000000000 --- a/keyboards/atreus50/readme.md +++ /dev/null @@ -1,25 +0,0 @@ -Preonic keyboard firmware -====================== -DIY/Assembled compact ortholinear 50% keyboard by [Ortholinear Keyboards](http://ortholinearkeyboards.com). - -## Quantum MK Firmware - -For the full Quantum feature list, see [the parent readme.md](/readme.md). - -## Building - -Download or clone the whole firmware and navigate to the keyboards/preonic folder. Once your dev env is setup, you'll be able to type `make` to generate your .hex - you can then use `make dfu` to program your PCB once you hit the reset button. - -Depending on which keymap you would like to use, you will have to compile slightly differently. - -### Default -To build with the default keymap, simply run `make`. - -### Other Keymaps -Several version of keymap are available in advance but you are recommended to define your favorite layout yourself. To define your own keymap, create a file in the keymaps folder named `.c` and see keymap document (you can find in top readme.md) and existent keymap files. - -To build the firmware binary hex file with a keymap just do `make` with `KEYMAP` option like: -``` -$ make KEYMAP=[default|jack|] -``` -Keymaps follow the format **__\.c__** and are stored in the `keymaps` folder. diff --git a/keyboards/atreus50/Makefile b/keyboards/handwired/atreus50/Makefile similarity index 100% rename from keyboards/atreus50/Makefile rename to keyboards/handwired/atreus50/Makefile diff --git a/keyboards/atreus50/atreus50.c b/keyboards/handwired/atreus50/atreus50.c similarity index 100% rename from keyboards/atreus50/atreus50.c rename to keyboards/handwired/atreus50/atreus50.c diff --git a/keyboards/atreus50/atreus50.h b/keyboards/handwired/atreus50/atreus50.h similarity index 100% rename from keyboards/atreus50/atreus50.h rename to keyboards/handwired/atreus50/atreus50.h diff --git a/keyboards/atreus50/config.h b/keyboards/handwired/atreus50/config.h similarity index 100% rename from keyboards/atreus50/config.h rename to keyboards/handwired/atreus50/config.h diff --git a/keyboards/atreus50/keymaps/default/Makefile b/keyboards/handwired/atreus50/keymaps/default/Makefile similarity index 100% rename from keyboards/atreus50/keymaps/default/Makefile rename to keyboards/handwired/atreus50/keymaps/default/Makefile diff --git a/keyboards/atreus50/keymaps/default/keymap.c b/keyboards/handwired/atreus50/keymaps/default/keymap.c similarity index 100% rename from keyboards/atreus50/keymaps/default/keymap.c rename to keyboards/handwired/atreus50/keymaps/default/keymap.c diff --git a/keyboards/handwired/atreus50/readme.md b/keyboards/handwired/atreus50/readme.md new file mode 100644 index 0000000000..0c24f67db2 --- /dev/null +++ b/keyboards/handwired/atreus50/readme.md @@ -0,0 +1,16 @@ +Handwired Atreus50 +================== + +This firmware is for a Handwired Atreus50 using an Arduino Pro Micro. + +## Pinout + +The following pins are used: +- Columns 1-13: D4, D7, E6, B4, B5, B6, B2, B3, B1, F7, F6, F5, F4 +- Rows 1-4: D3, D2, D1, D0 + +## Compiling and loading the firmware + +To build the firmware, run `make`. + +To flash the firemware onto the microcontroller, run `make avrdude`, and press the reset button. diff --git a/keyboards/atreus50/rules.mk b/keyboards/handwired/atreus50/rules.mk similarity index 100% rename from keyboards/atreus50/rules.mk rename to keyboards/handwired/atreus50/rules.mk