From 00c3ecc23849efe525fb52fc82c938ce1b521c21 Mon Sep 17 00:00:00 2001 From: Didier Loiseau Date: Tue, 29 Dec 2015 21:36:17 +0100 Subject: Initial TypeMatrix keymap: Layer 0 --- keyboard/ergodox_ez/keymaps/keymap_typematrix.c | 188 ++++++++++++++++++++++++ 1 file changed, 188 insertions(+) create mode 100644 keyboard/ergodox_ez/keymaps/keymap_typematrix.c (limited to 'keyboard') diff --git a/keyboard/ergodox_ez/keymaps/keymap_typematrix.c b/keyboard/ergodox_ez/keymaps/keymap_typematrix.c new file mode 100644 index 0000000000..5b848fb1a6 --- /dev/null +++ b/keyboard/ergodox_ez/keymaps/keymap_typematrix.c @@ -0,0 +1,188 @@ +/* TypeMatrix-2030-like keymap */ +#include "ergodox_ez.h" +#include "debug.h" +#include "action_layer.h" + +#define BASE 0 // default layer +#define SYMB 1 // symbols +#define MDIA 2 // media keys + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { +/* Keymap 0: Basic layer + * + * ,--------------------------------------------------. ,--------------------------------------------------. + * | ` | 1 | 2 | 3 | 4 | 5 | Del | | Del | 6 | 7 | 8 | 9 | 0 | ] | + * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| + * | Tab | Q | W | E | R | T |Backsp| |Backsp| Y | U | I | O | P | [ | + * |--------+------+------+------+------+------|ace | |ace |------+------+------+------+------+--------| + * | LShift | A | S | D | F | G |------| |------| H | J | K | L |; / L2| '/Shift| + * |--------+------+------+------+------+------|Enter | |Enter |------+------+------+------+------+--------| + * | LShift | Z | X | C | V | B |/Hyper| |/ Meh | N | M | , | . | / | \/Shift| + * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' + * |LCtrl | ~L1 | LGui | Play | App | | Left |Right | - | = |RCtrl | + * `----------------------------------' `----------------------------------' + * ,--------------. ,---------------. + * |Esc/Alt| L1 | | Home |Ctrl/End| + * ,------+-------+------| |------+--------+------. + * |Space | Space | PgUp | | Up | | | + * | / | / |------| |------| RAlt |Space | + * | Alt | Alt | PgDn | | Down | | | + * `---------------------' `----------------------' + */ +// If it accepts an argument (i.e, is a function), it doesn't need KC_. +// Otherwise, it needs KC_* +[BASE] = KEYMAP( // layer 0 : default + // left hand + KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_DELT, + KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_BSPC, + KC_LSFT, KC_A, KC_S, KC_D, KC_F, KC_G, + KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, ALL_T(KC_ENT), + KC_LCTL, KC_FN1, KC_LGUI,KC_MPLY,KC_APP, + + ALT_T(KC_ESC), TG(1), + KC_PGUP, + ALT_T(KC_SPC), ALT_T(KC_SPC), KC_PGDN, + + // right hand + KC_DELT, KC_6, KC_7, KC_8, KC_9, KC_0, KC_RBRC, + KC_BSPC, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, + KC_H, KC_J, KC_K, KC_L, LT(MDIA, KC_SCLN),SFT_T(KC_QUOT), + MEH_T(KC_ENT),KC_N, KC_M, KC_COMM,KC_DOT, KC_SLSH, SFT_T(KC_BSLS), + KC_LEFT,KC_RGHT,KC_MINS,KC_EQL, KC_RCTL, + + KC_HOME, CTL_T(KC_END), + KC_UP, + KC_DOWN, KC_RALT, KC_SPC + ), +/* Keymap 1: Symbol Layer + * + * ,--------------------------------------------------. ,--------------------------------------------------. + * | | F1 | F2 | F3 | F4 | F5 | | | | F6 | F7 | F8 | F9 | F10 | F11 | + * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| + * | | ! | @ | { | } | | | | | | Up | 7 | 8 | 9 | * | F12 | + * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + * | | # | $ | ( | ) | ` |------| |------| Down | 4 | 5 | 6 | + | | + * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + * | | % | ^ | [ | ] | ~ | | | | & | 1 | 2 | 3 | \ | | + * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' + * | | | | | | | | . | 0 | = | | + * `----------------------------------' `----------------------------------' + * ,-------------. ,-------------. + * | | | | | | + * ,------|------|------| |------+------+------. + * | | | | | | | | + * | | |------| |------| | | + * | | | | | | | | + * `--------------------' `--------------------' + */ +// SYMBOLS +[SYMB] = KEYMAP( + // left hand + KC_TRNS,KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_TRNS, + KC_TRNS,KC_EXLM,KC_AT, KC_LCBR,KC_RCBR,KC_PIPE,KC_TRNS, + KC_TRNS,KC_HASH,KC_DLR, KC_LPRN,KC_RPRN,KC_GRV, + KC_TRNS,KC_PERC,KC_CIRC,KC_LBRC,KC_RBRC,KC_TILD,KC_TRNS, + KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS, + KC_TRNS,KC_TRNS, + KC_TRNS, + KC_TRNS,KC_TRNS,KC_TRNS, + // right hand + KC_TRNS, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, + KC_TRNS, KC_UP, KC_7, KC_8, KC_9, KC_ASTR, KC_F12, + KC_DOWN, KC_4, KC_5, KC_6, KC_PLUS, KC_TRNS, + KC_TRNS, KC_AMPR, KC_1, KC_2, KC_3, KC_BSLS, KC_TRNS, + KC_TRNS,KC_DOT, KC_0, KC_EQL, KC_TRNS, + KC_TRNS, KC_TRNS, + KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS +), +/* Keymap 2: Media and mouse keys + * + * ,--------------------------------------------------. ,--------------------------------------------------. + * | | | | | | | | | | | | | | | | + * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| + * | | | | MsUp | | | | | | | | | | | | + * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + * | | |MsLeft|MsDown|MsRght| |------| |------| | | | | | Play | + * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + * | | | | | | | | | | | | Prev | Next | | | + * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' + * | | | | Lclk | Rclk | |VolUp |VolDn | Mute | | | + * `----------------------------------' `----------------------------------' + * ,-------------. ,-------------. + * | | | | | | + * ,------|------|------| |------+------+------. + * | | | | | | |Brwser| + * | | |------| |------| |Back | + * | | | | | | | | + * `--------------------' `--------------------' + */ +// MEDIA AND MOUSE +KEYMAP( + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_MS_U, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_MS_L, KC_MS_D, KC_MS_R, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_BTN1, KC_BTN2, + KC_TRNS, KC_TRNS, + KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, + // right hand + 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_MPLY, + KC_TRNS, KC_TRNS, KC_TRNS, KC_MPRV, KC_MNXT, KC_TRNS, KC_TRNS, + KC_VOLU, KC_VOLD, KC_MUTE, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, + KC_TRNS, + KC_TRNS, KC_TRNS, KC_WBAK +), +}; + +const uint16_t PROGMEM fn_actions[] = { + [1] = ACTION_LAYER_TAP_TOGGLE(SYMB) // FN1 - Momentary Layer 1 (Symbols) +}; + +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; +}; + +// 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; + } + +}; -- cgit v1.2.3 From 900c1f991df6b30a45a25094c61bcf5ed54119cf Mon Sep 17 00:00:00 2001 From: Didier Loiseau Date: Tue, 29 Dec 2015 21:36:17 +0100 Subject: Initial TypeMatrix keymap: Layer 0 --- keyboard/ergodox_ez/keymaps/keymap_typematrix.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'keyboard') diff --git a/keyboard/ergodox_ez/keymaps/keymap_typematrix.c b/keyboard/ergodox_ez/keymaps/keymap_typematrix.c index 5b848fb1a6..38b8da6352 100644 --- a/keyboard/ergodox_ez/keymaps/keymap_typematrix.c +++ b/keyboard/ergodox_ez/keymaps/keymap_typematrix.c @@ -17,7 +17,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * |--------+------+------+------+------+------|ace | |ace |------+------+------+------+------+--------| * | LShift | A | S | D | F | G |------| |------| H | J | K | L |; / L2| '/Shift| * |--------+------+------+------+------+------|Enter | |Enter |------+------+------+------+------+--------| - * | LShift | Z | X | C | V | B |/Hyper| |/ Meh | N | M | , | . | / | \/Shift| + * | LShift | Z | X | C | V | B | | | | N | M | , | . | / | \/Shift| * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' * |LCtrl | ~L1 | LGui | Play | App | | Left |Right | - | = |RCtrl | * `----------------------------------' `----------------------------------' @@ -36,7 +36,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_DELT, KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_BSPC, KC_LSFT, KC_A, KC_S, KC_D, KC_F, KC_G, - KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, ALL_T(KC_ENT), + KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_ENT, KC_LCTL, KC_FN1, KC_LGUI,KC_MPLY,KC_APP, ALT_T(KC_ESC), TG(1), @@ -47,7 +47,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { KC_DELT, KC_6, KC_7, KC_8, KC_9, KC_0, KC_RBRC, KC_BSPC, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_H, KC_J, KC_K, KC_L, LT(MDIA, KC_SCLN),SFT_T(KC_QUOT), - MEH_T(KC_ENT),KC_N, KC_M, KC_COMM,KC_DOT, KC_SLSH, SFT_T(KC_BSLS), + KC_ENT, KC_N, KC_M, KC_COMM,KC_DOT, KC_SLSH, SFT_T(KC_BSLS), KC_LEFT,KC_RGHT,KC_MINS,KC_EQL, KC_RCTL, KC_HOME, CTL_T(KC_END), -- cgit v1.2.3 From ac94577cbe03b771820a17e94ced640d78c06dfc Mon Sep 17 00:00:00 2001 From: Didier Loiseau Date: Wed, 30 Dec 2015 00:51:12 +0100 Subject: TypeMatrix keymap: Layer 1 (Fn Layer) --- keyboard/ergodox_ez/keymaps/keymap_typematrix.c | 47 ++++++++++++++----------- 1 file changed, 27 insertions(+), 20 deletions(-) (limited to 'keyboard') diff --git a/keyboard/ergodox_ez/keymaps/keymap_typematrix.c b/keyboard/ergodox_ez/keymaps/keymap_typematrix.c index 38b8da6352..01ae6bbcae 100644 --- a/keyboard/ergodox_ez/keymaps/keymap_typematrix.c +++ b/keyboard/ergodox_ez/keymaps/keymap_typematrix.c @@ -57,42 +57,44 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { /* Keymap 1: Symbol Layer * * ,--------------------------------------------------. ,--------------------------------------------------. - * | | F1 | F2 | F3 | F4 | F5 | | | | F6 | F7 | F8 | F9 | F10 | F11 | + * | | F1 | F2 | F3 | F4 | F5 |Insert| |Insert| F6 | F7 | Tab | / | * | - | * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| - * | | ! | @ | { | } | | | | | | Up | 7 | 8 | 9 | * | F12 | + * | | F8 | F9 | F10 | F11 | F12 |VolUp | | Home | Up | End | 7 | 8 | 9 | + | * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| - * | | # | $ | ( | ) | ` |------| |------| Down | 4 | 5 | 6 | + | | - * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| - * | | % | ^ | [ | ] | ~ | | | | & | 1 | 2 | 3 | \ | | + * | | | | | | |------| |------| Down | Right| 4 | 5 | 6 | + | + * |--------+------+------+------+------+------|VolDn | | Left |------+------+------+------+------+--------| + * | | | cut | copy |paste | Mute | | | | | Prev | 1 | 2 | 3 |KpEnter | * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' - * | | | | | | | | . | 0 | = | | - * `----------------------------------' `----------------------------------' + * | | | | | | | Next | 0 | 00 | . |KpEnter| + * `----------------------------------' `-----------------------------------' * ,-------------. ,-------------. - * | | | | | | + * | | | |n.lock|c.lock| * ,------|------|------| |------+------+------. * | | | | | | | | - * | | |------| |------| | | + * | Mute | |------| |------| | | * | | | | | | | | * `--------------------' `--------------------' */ // SYMBOLS [SYMB] = KEYMAP( // left hand - KC_TRNS,KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_TRNS, - KC_TRNS,KC_EXLM,KC_AT, KC_LCBR,KC_RCBR,KC_PIPE,KC_TRNS, - KC_TRNS,KC_HASH,KC_DLR, KC_LPRN,KC_RPRN,KC_GRV, - KC_TRNS,KC_PERC,KC_CIRC,KC_LBRC,KC_RBRC,KC_TILD,KC_TRNS, + KC_TRNS,KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_INS, + KC_TRNS,KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_VOLU, + KC_TRNS,KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS,KC_TRNS,LSFT(KC_DELT),LCTL(KC_INS),LSFT(KC_INS),KC_MUTE,KC_VOLD, KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS, + KC_TRNS,KC_TRNS, KC_TRNS, - KC_TRNS,KC_TRNS,KC_TRNS, + KC_MUTE,KC_TRNS,KC_TRNS, // right hand - KC_TRNS, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, - KC_TRNS, KC_UP, KC_7, KC_8, KC_9, KC_ASTR, KC_F12, - KC_DOWN, KC_4, KC_5, KC_6, KC_PLUS, KC_TRNS, - KC_TRNS, KC_AMPR, KC_1, KC_2, KC_3, KC_BSLS, KC_TRNS, - KC_TRNS,KC_DOT, KC_0, KC_EQL, KC_TRNS, - KC_TRNS, KC_TRNS, + KC_INS, KC_F6, KC_F7, KC_TAB, KC_PSLS, KC_PAST, KC_PMNS, + KC_HOME, KC_UP, KC_END, KC_P7, KC_P8, KC_P9, KC_PPLS, + KC_DOWN, KC_RGHT, KC_P4, KC_P5, KC_P6, KC_PPLS, + KC_LEFT, KC_TRNS, KC_MPRV, KC_P1, KC_P2, KC_P3, KC_PENT, + KC_MNXT, KC_P0, M(1), KC_PDOT, KC_PENT, + + KC_NLCK, KC_CAPS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS ), @@ -154,6 +156,11 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) unregister_code(KC_RSFT); } break; + case 1: + if (record->event.pressed) { + return MACRO( I(25), T(P0), T(P0), END ); + } + break; } return MACRO_NONE; }; -- cgit v1.2.3 From 8677ec0c9fbf0d0bb639ad082e27d6650b3c1dd0 Mon Sep 17 00:00:00 2001 From: Didier Loiseau Date: Wed, 30 Dec 2015 00:56:02 +0100 Subject: Use 3rd led as caps-lock indicator --- keyboard/ergodox_ez/keymaps/keymap_typematrix.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) (limited to 'keyboard') diff --git a/keyboard/ergodox_ez/keymaps/keymap_typematrix.c b/keyboard/ergodox_ez/keymaps/keymap_typematrix.c index 01ae6bbcae..1b201c2237 100644 --- a/keyboard/ergodox_ez/keymaps/keymap_typematrix.c +++ b/keyboard/ergodox_ez/keymaps/keymap_typematrix.c @@ -2,6 +2,7 @@ #include "ergodox_ez.h" #include "debug.h" #include "action_layer.h" +#include "led.h" #define BASE 0 // default layer #define SYMB 1 // symbols @@ -191,5 +192,7 @@ void * matrix_scan_user(void) { // none break; } - + if (host_keyboard_leds() & (1< Date: Wed, 30 Dec 2015 12:59:33 +0100 Subject: Make bottom row more similar to the TM - keep home/end at the same location - RAlt as first key on the bottom right row - left/right arrows moved on the thumb, near the other arrows - added Alt on App - added Alt on Mute in Layer 1 - removed ALT from left spaces to avoid issues when pressing too slowly --- keyboard/ergodox_ez/keymaps/keymap_typematrix.c | 36 ++++++++++++------------- 1 file changed, 18 insertions(+), 18 deletions(-) (limited to 'keyboard') diff --git a/keyboard/ergodox_ez/keymaps/keymap_typematrix.c b/keyboard/ergodox_ez/keymaps/keymap_typematrix.c index 1b201c2237..fd7c020bfe 100644 --- a/keyboard/ergodox_ez/keymaps/keymap_typematrix.c +++ b/keyboard/ergodox_ez/keymaps/keymap_typematrix.c @@ -20,15 +20,15 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * |--------+------+------+------+------+------|Enter | |Enter |------+------+------+------+------+--------| * | LShift | Z | X | C | V | B | | | | N | M | , | . | / | \/Shift| * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' - * |LCtrl | ~L1 | LGui | Play | App | | Left |Right | - | = |RCtrl | - * `----------------------------------' `----------------------------------' - * ,--------------. ,---------------. - * |Esc/Alt| L1 | | Home |Ctrl/End| - * ,------+-------+------| |------+--------+------. - * |Space | Space | PgUp | | Up | | | - * | / | / |------| |------| RAlt |Space | - * | Alt | Alt | PgDn | | Down | | | - * `---------------------' `----------------------' + * |LCtrl | ~L1 | LGui | Play |App/Alt| | RAlt | - | Home | = |End/Ctl| + * `-----------------------------------' `-----------------------------------' + * ,--------------. ,-------------. + * |Esc/Alt| L1 | | Left |Right | + * ,------+-------+------| |------+------+------. + * | | | PgUp | | Up | | | + * |Space | Space |------| |------|Space |Space | + * | | | PgDn | | Down | | | + * `---------------------' `--------------------' */ // If it accepts an argument (i.e, is a function), it doesn't need KC_. // Otherwise, it needs KC_* @@ -38,22 +38,22 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_BSPC, KC_LSFT, KC_A, KC_S, KC_D, KC_F, KC_G, KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_ENT, - KC_LCTL, KC_FN1, KC_LGUI,KC_MPLY,KC_APP, + KC_LCTL, KC_FN1, KC_LGUI,KC_MPLY,ALT_T(KC_APP), ALT_T(KC_ESC), TG(1), KC_PGUP, - ALT_T(KC_SPC), ALT_T(KC_SPC), KC_PGDN, + KC_SPC, KC_SPC, KC_PGDN, // right hand KC_DELT, KC_6, KC_7, KC_8, KC_9, KC_0, KC_RBRC, KC_BSPC, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_H, KC_J, KC_K, KC_L, LT(MDIA, KC_SCLN),SFT_T(KC_QUOT), KC_ENT, KC_N, KC_M, KC_COMM,KC_DOT, KC_SLSH, SFT_T(KC_BSLS), - KC_LEFT,KC_RGHT,KC_MINS,KC_EQL, KC_RCTL, + KC_RALT,KC_MINS,KC_HOME,KC_EQL, CTL_T(KC_END), - KC_HOME, CTL_T(KC_END), + KC_LEFT, KC_RGHT, KC_UP, - KC_DOWN, KC_RALT, KC_SPC + KC_DOWN, KC_SPC, KC_SPC ), /* Keymap 1: Symbol Layer * @@ -71,9 +71,9 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * ,-------------. ,-------------. * | | | |n.lock|c.lock| * ,------|------|------| |------+------+------. - * | | | | | | | | - * | Mute | |------| |------| | | - * | | | | | | | | + * | Mute | | | | | | | + * | / | |------| |------| | | + * | Alt | | | | | | | * `--------------------' `--------------------' */ // SYMBOLS @@ -87,7 +87,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { KC_TRNS,KC_TRNS, KC_TRNS, - KC_MUTE,KC_TRNS,KC_TRNS, + ALT_T(KC_MUTE),KC_TRNS,KC_TRNS, // right hand KC_INS, KC_F6, KC_F7, KC_TAB, KC_PSLS, KC_PAST, KC_PMNS, KC_HOME, KC_UP, KC_END, KC_P7, KC_P8, KC_P9, KC_PPLS, -- cgit v1.2.3 From 56070d424b9dd90f8153b2fa1cb03c896bf5ee68 Mon Sep 17 00:00:00 2001 From: Didier Loiseau Date: Wed, 30 Dec 2015 13:26:31 +0100 Subject: Added description of the layout and main differences with real TM --- keyboard/ergodox_ez/keymaps/keymap_typematrix.c | 22 +++++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) (limited to 'keyboard') diff --git a/keyboard/ergodox_ez/keymaps/keymap_typematrix.c b/keyboard/ergodox_ez/keymaps/keymap_typematrix.c index fd7c020bfe..de864ddfef 100644 --- a/keyboard/ergodox_ez/keymaps/keymap_typematrix.c +++ b/keyboard/ergodox_ez/keymaps/keymap_typematrix.c @@ -1,4 +1,24 @@ -/* TypeMatrix-2030-like keymap */ +/* TypeMatrix-2030-like keymap + * --------------------------- + * Currently supported features: + * Layer 0: default layer close to the TM with the following differences: + * - top row and rightmost column are removed, corresponding keys are displaced, except app-keys which are removed + * - bottom-left keys are reorganized on a single roz as: Ctrl, "Fn", Gui, Play, App/Alt + * - "shuffle" and "desktop" are not supported + * - right-shift is moved on ' and \ + * - right-ctrl is moved on End + * - ] is moved in place of the dash (-) + * - dash (-) and = are moved on bottom right row + * - arrows and PgUp/PgDn are moved on the thumbs + * Layer 1: "Fn"-layer close to the TM with the following differences: + * - provides access to F1-F12 + * - VolUp & VolDn are only on left hand + * - arrows & numpad are displaced by 1 to the top left + * Layer 2: TODO -- currently kept as in the default ErgoDox EZ layout + * Leds: + * - left (1st) & middle (2nd) leds are used to indicate layers 1 & 2 respectively + * - right (3rd) led is used to indicate caps-lock + */ #include "ergodox_ez.h" #include "debug.h" #include "action_layer.h" -- cgit v1.2.3 From 38a0e62a10fcbb4b96f8f69d4fc69872d2d3a7ed Mon Sep 17 00:00:00 2001 From: Didier Loiseau Date: Sat, 9 Jan 2016 00:55:54 +0100 Subject: Layer 1: restore backspace, ralt and ctl on right hand - home replaced by KC_TRNS to make backspace available - prev/next moved left to space to restore ralt - arrows moved down to have reversed T-shape - added ctl on bottom right KpEnter, to match layer 0 - removed alt from mute, as it was already no more in layer 0 --- keyboard/ergodox_ez/keymaps/keymap_typematrix.c | 30 ++++++++++++------------- 1 file changed, 15 insertions(+), 15 deletions(-) (limited to 'keyboard') diff --git a/keyboard/ergodox_ez/keymaps/keymap_typematrix.c b/keyboard/ergodox_ez/keymaps/keymap_typematrix.c index de864ddfef..8e442e3cc2 100644 --- a/keyboard/ergodox_ez/keymaps/keymap_typematrix.c +++ b/keyboard/ergodox_ez/keymaps/keymap_typematrix.c @@ -80,20 +80,20 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * ,--------------------------------------------------. ,--------------------------------------------------. * | | F1 | F2 | F3 | F4 | F5 |Insert| |Insert| F6 | F7 | Tab | / | * | - | * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| - * | | F8 | F9 | F10 | F11 | F12 |VolUp | | Home | Up | End | 7 | 8 | 9 | + | + * | | F8 | F9 | F10 | F11 | F12 |VolUp | | | | Home | 7 | 8 | 9 | + | * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| - * | | | | | | |------| |------| Down | Right| 4 | 5 | 6 | + | - * |--------+------+------+------+------+------|VolDn | | Left |------+------+------+------+------+--------| - * | | | cut | copy |paste | Mute | | | | | Prev | 1 | 2 | 3 |KpEnter | + * | | | | | | |------| |------| Up | End | 4 | 5 | 6 | + | + * |--------+------+------+------+------+------|VolDn | | |------+------+------+------+------+--------| + * | | | cut | copy |paste | Mute | | | Left | Down | Right| 1 | 2 | 3 |KpEnter | * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' - * | | | | | | | Next | 0 | 00 | . |KpEnter| + * | | | | | | | | 0 | 00 | . |Etr/Ctl| * `----------------------------------' `-----------------------------------' * ,-------------. ,-------------. * | | | |n.lock|c.lock| * ,------|------|------| |------+------+------. - * | Mute | | | | | | | - * | / | |------| |------| | | - * | Alt | | | | | | | + * | | | | | Next | | | + * | Mute | |------| |------| | | + * | | | | | Prev | | | * `--------------------' `--------------------' */ // SYMBOLS @@ -107,17 +107,17 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { KC_TRNS,KC_TRNS, KC_TRNS, - ALT_T(KC_MUTE),KC_TRNS,KC_TRNS, + KC_MUTE, KC_TRNS,KC_TRNS, // right hand KC_INS, KC_F6, KC_F7, KC_TAB, KC_PSLS, KC_PAST, KC_PMNS, - KC_HOME, KC_UP, KC_END, KC_P7, KC_P8, KC_P9, KC_PPLS, - KC_DOWN, KC_RGHT, KC_P4, KC_P5, KC_P6, KC_PPLS, - KC_LEFT, KC_TRNS, KC_MPRV, KC_P1, KC_P2, KC_P3, KC_PENT, - KC_MNXT, KC_P0, M(1), KC_PDOT, KC_PENT, + KC_TRNS, KC_TRNS, KC_HOME, KC_P7, KC_P8, KC_P9, KC_PPLS, + KC_UP, KC_END, KC_P4, KC_P5, KC_P6, KC_PPLS, + KC_LEFT, KC_DOWN, KC_RGHT, KC_P1, KC_P2, KC_P3, KC_PENT, + KC_TRNS, KC_P0, M(1), KC_PDOT, CTL_T(KC_PENT), KC_NLCK, KC_CAPS, - KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS + KC_MPRV, + KC_MNXT, KC_TRNS, KC_TRNS ), /* Keymap 2: Media and mouse keys * -- cgit v1.2.3 From bfda6ee41773355c413904b128b317ee7eb45569 Mon Sep 17 00:00:00 2001 From: Didier Loiseau Date: Sat, 9 Jan 2016 17:47:26 +0100 Subject: Split fn layer from numbers layer to better match the TM behaviour - removed access to layer 2 from ";" key - "fn" key toggles both layers 1 & 2 - replaced media and mouse layer by fn layer - renamed symbol layer to numbers layer - moved all F-keys together on left hand --- keyboard/ergodox_ez/keymaps/keymap_typematrix.c | 156 ++++++++++++------------ 1 file changed, 78 insertions(+), 78 deletions(-) (limited to 'keyboard') diff --git a/keyboard/ergodox_ez/keymaps/keymap_typematrix.c b/keyboard/ergodox_ez/keymaps/keymap_typematrix.c index 8e442e3cc2..5bd2f9d725 100644 --- a/keyboard/ergodox_ez/keymaps/keymap_typematrix.c +++ b/keyboard/ergodox_ez/keymaps/keymap_typematrix.c @@ -10,11 +10,12 @@ * - ] is moved in place of the dash (-) * - dash (-) and = are moved on bottom right row * - arrows and PgUp/PgDn are moved on the thumbs - * Layer 1: "Fn"-layer close to the TM with the following differences: - * - provides access to F1-F12 - * - VolUp & VolDn are only on left hand - * - arrows & numpad are displaced by 1 to the top left - * Layer 2: TODO -- currently kept as in the default ErgoDox EZ layout + * Layer 1: numbers layer close to the TM when toggling "num" with the following differences: + * - numpad is displaced by 1 to the top left + * - arrows are displaced by 1 to the left + * - provides access to F1-F12, caps lock and num lock + * Layer 2: "fn" layer ("fn" key toggles both layers 1 & 2) with the following differences: + * - VolUp & VolDn are only on left hand to keep access to arrows on right hand * Leds: * - left (1st) & middle (2nd) leds are used to indicate layers 1 & 2 respectively * - right (3rd) led is used to indicate caps-lock @@ -25,8 +26,8 @@ #include "led.h" #define BASE 0 // default layer -#define SYMB 1 // symbols -#define MDIA 2 // media keys +#define NMBR 1 // numbers layer +#define FNLR 2 // fn layer const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { /* Keymap 0: Basic layer @@ -36,11 +37,11 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| * | Tab | Q | W | E | R | T |Backsp| |Backsp| Y | U | I | O | P | [ | * |--------+------+------+------+------+------|ace | |ace |------+------+------+------+------+--------| - * | LShift | A | S | D | F | G |------| |------| H | J | K | L |; / L2| '/Shift| + * | LShift | A | S | D | F | G |------| |------| H | J | K | L | ; | '/Shift| * |--------+------+------+------+------+------|Enter | |Enter |------+------+------+------+------+--------| * | LShift | Z | X | C | V | B | | | | N | M | , | . | / | \/Shift| * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' - * |LCtrl | ~L1 | LGui | Play |App/Alt| | RAlt | - | Home | = |End/Ctl| + * |LCtrl | fn | LGui | Play |App/Alt| | RAlt | - | Home | = |End/Ctl| * `-----------------------------------' `-----------------------------------' * ,--------------. ,-------------. * |Esc/Alt| L1 | | Left |Right | @@ -58,56 +59,56 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_BSPC, KC_LSFT, KC_A, KC_S, KC_D, KC_F, KC_G, KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_ENT, - KC_LCTL, KC_FN1, KC_LGUI,KC_MPLY,ALT_T(KC_APP), + KC_LCTL, M(2), KC_LGUI,KC_MPLY,ALT_T(KC_APP), ALT_T(KC_ESC), TG(1), KC_PGUP, KC_SPC, KC_SPC, KC_PGDN, // right hand - KC_DELT, KC_6, KC_7, KC_8, KC_9, KC_0, KC_RBRC, - KC_BSPC, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, - KC_H, KC_J, KC_K, KC_L, LT(MDIA, KC_SCLN),SFT_T(KC_QUOT), - KC_ENT, KC_N, KC_M, KC_COMM,KC_DOT, KC_SLSH, SFT_T(KC_BSLS), - KC_RALT,KC_MINS,KC_HOME,KC_EQL, CTL_T(KC_END), + KC_DELT, KC_6, KC_7, KC_8, KC_9, KC_0, KC_RBRC, + KC_BSPC, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, + KC_H, KC_J, KC_K, KC_L, KC_SCLN, SFT_T(KC_QUOT), + KC_ENT, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, SFT_T(KC_BSLS), + KC_RALT, KC_MINS, KC_HOME, KC_EQL, CTL_T(KC_END), KC_LEFT, KC_RGHT, KC_UP, KC_DOWN, KC_SPC, KC_SPC ), -/* Keymap 1: Symbol Layer +/* Keymap 1: Numbers Layer * * ,--------------------------------------------------. ,--------------------------------------------------. - * | | F1 | F2 | F3 | F4 | F5 |Insert| |Insert| F6 | F7 | Tab | / | * | - | + * | | F1 | F2 | F3 | F4 | F5 | | | | | | Tab | / | * | - | * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| - * | | F8 | F9 | F10 | F11 | F12 |VolUp | | | | Home | 7 | 8 | 9 | + | + * | | F6 | F7 | F8 | F9 | F10 | | | | | Home | 7 | 8 | 9 | + | * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| - * | | | | | | |------| |------| Up | End | 4 | 5 | 6 | + | - * |--------+------+------+------+------+------|VolDn | | |------+------+------+------+------+--------| - * | | | cut | copy |paste | Mute | | | Left | Down | Right| 1 | 2 | 3 |KpEnter | + * | | F11 | F12 | | | |------| |------| Up | End | 4 | 5 | 6 | + | + * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + * | | | | | | | | | Left | Down | Right| 1 | 2 | 3 |KpEnter | * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' * | | | | | | | | 0 | 00 | . |Etr/Ctl| * `----------------------------------' `-----------------------------------' * ,-------------. ,-------------. * | | | |n.lock|c.lock| * ,------|------|------| |------+------+------. - * | | | | | Next | | | - * | Mute | |------| |------| | | - * | | | | | Prev | | | + * | | | | | | | | + * | | |------| |------| | | + * | | | | | | | | * `--------------------' `--------------------' */ // SYMBOLS -[SYMB] = KEYMAP( +[NMBR] = KEYMAP( // left hand - KC_TRNS,KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_INS, - KC_TRNS,KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_VOLU, - KC_TRNS,KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS,KC_TRNS,LSFT(KC_DELT),LCTL(KC_INS),LSFT(KC_INS),KC_MUTE,KC_VOLD, - KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS, + KC_TRNS, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_TRNS, + KC_TRNS, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_TRNS, + KC_TRNS, KC_F11, KC_F12, 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_MUTE, KC_TRNS,KC_TRNS, + KC_TRNS, KC_TRNS,KC_TRNS, // right hand KC_INS, KC_F6, KC_F7, KC_TAB, KC_PSLS, KC_PAST, KC_PMNS, KC_TRNS, KC_TRNS, KC_HOME, KC_P7, KC_P8, KC_P9, KC_PPLS, @@ -116,73 +117,77 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { KC_TRNS, KC_P0, M(1), KC_PDOT, CTL_T(KC_PENT), KC_NLCK, KC_CAPS, - KC_MPRV, - KC_MNXT, KC_TRNS, KC_TRNS + KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS ), -/* Keymap 2: Media and mouse keys +/* Keymap 2: fn layer * * ,--------------------------------------------------. ,--------------------------------------------------. - * | | | | | | | | | | | | | | | | + * | | | | | | |Insert| |Insert| | | | | | | * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| - * | | | | MsUp | | | | | | | | | | | | + * | | | | | | |VolUp | | | | | | | | | * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| - * | | |MsLeft|MsDown|MsRght| |------| |------| | | | | | Play | + * | | | | | | |------| |------| | | | | | | * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| - * | | | | | | | | | | | | Prev | Next | | | + * | | | cut | copy |paste | Mute |VolDn | | | | | | | | | * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' - * | | | | Lclk | Rclk | |VolUp |VolDn | Mute | | | + * | | | | | | | | | | | | * `----------------------------------' `----------------------------------' * ,-------------. ,-------------. * | | | | | | * ,------|------|------| |------+------+------. - * | | | | | | |Brwser| - * | | |------| |------| |Back | - * | | | | | | | | + * | | | | | Next | | | + * | Mute | |------| |------| | | + * | | | | | Prev | | | * `--------------------' `--------------------' */ // MEDIA AND MOUSE -KEYMAP( - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, KC_MS_U, KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, KC_MS_L, KC_MS_D, KC_MS_R, KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, KC_BTN1, KC_BTN2, +[FNLR] = KEYMAP( + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_INS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_VOLU, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, LSFT(KC_DELT),LCTL(KC_INS),LSFT(KC_INS), KC_MUTE, KC_VOLD, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, + KC_MUTE, KC_TRNS, KC_TRNS, // right hand + KC_INS, 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_MPLY, - KC_TRNS, KC_TRNS, KC_TRNS, KC_MPRV, KC_MNXT, KC_TRNS, KC_TRNS, - KC_VOLU, KC_VOLD, KC_MUTE, 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_WBAK + KC_MPRV, + KC_MNXT, KC_TRNS, KC_TRNS ), }; const uint16_t PROGMEM fn_actions[] = { - [1] = ACTION_LAYER_TAP_TOGGLE(SYMB) // FN1 - Momentary Layer 1 (Symbols) }; const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) { // MACRODOWN only works in this function - switch(id) { + switch(id) { case 0: - if (record->event.pressed) { - register_code(KC_RSFT); - } else { - unregister_code(KC_RSFT); - } + if (record->event.pressed) { + register_code(KC_RSFT); + } else { + unregister_code(KC_RSFT); + } break; case 1: - if (record->event.pressed) { - return MACRO( I(25), T(P0), T(P0), END ); - } + if (record->event.pressed) { + return MACRO( I(25), T(P0), T(P0), END ); + } break; - } + case 2: + layer_state ^= (1 << NMBR) | (1 << FNLR); + break; + } return MACRO_NONE; }; @@ -194,24 +199,19 @@ 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; + // led 1: numbers layer + if (layer_state & (1 << NMBR)) { + ergodox_right_led_1_on(); + } + // led 2: fn layer + if (layer_state & (1 << FNLR)) { + ergodox_right_led_2_on(); } + // led 3: caps lock if (host_keyboard_leds() & (1< Date: Sun, 10 Jan 2016 19:15:33 +0100 Subject: Added fn-eject, fn-power .. fn-pause keys Eject does not work though, see jackhumbert/qmk_firmware#82 and tmk/tmk_keyboard#250 --- keyboard/ergodox_ez/keymaps/keymap_typematrix.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) (limited to 'keyboard') diff --git a/keyboard/ergodox_ez/keymaps/keymap_typematrix.c b/keyboard/ergodox_ez/keymaps/keymap_typematrix.c index 5bd2f9d725..6151b3628d 100644 --- a/keyboard/ergodox_ez/keymaps/keymap_typematrix.c +++ b/keyboard/ergodox_ez/keymaps/keymap_typematrix.c @@ -123,9 +123,9 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { /* Keymap 2: fn layer * * ,--------------------------------------------------. ,--------------------------------------------------. - * | | | | | | |Insert| |Insert| | | | | | | + * | | | | | | |Insert| |Insert|Eject |Power |Sleep | Wake |PrtScr|ScrollLk| * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| - * | | | | | | |VolUp | | | | | | | | | + * | | | | | | |VolUp | | | | | | | | Pause | * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| * | | | | | | |------| |------| | | | | | | * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| @@ -153,8 +153,8 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { KC_TRNS, KC_MUTE, KC_TRNS, KC_TRNS, // right hand - KC_INS, 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_INS, KC_EJCT, KC_PWR, KC_SLEP, KC_WAKE, KC_PSCR, KC_SLCK, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_PAUS, 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, -- cgit v1.2.3 From d3e4cc9af66630906f023cf83f1df46b065435a5 Mon Sep 17 00:00:00 2001 From: Didier Loiseau Date: Sun, 10 Jan 2016 19:49:08 +0100 Subject: Implement cut/copy/paste as macros Workaround for jackhumbert/qmk_firmware#81 + added macro names + removed unused macro 0 --- keyboard/ergodox_ez/keymaps/keymap_typematrix.c | 38 +++++++++++++++++-------- 1 file changed, 26 insertions(+), 12 deletions(-) (limited to 'keyboard') diff --git a/keyboard/ergodox_ez/keymaps/keymap_typematrix.c b/keyboard/ergodox_ez/keymaps/keymap_typematrix.c index 6151b3628d..7161a638a8 100644 --- a/keyboard/ergodox_ez/keymaps/keymap_typematrix.c +++ b/keyboard/ergodox_ez/keymaps/keymap_typematrix.c @@ -29,6 +29,12 @@ #define NMBR 1 // numbers layer #define FNLR 2 // fn layer +#define MDBL0 1 +#define MFNLR 2 +#define MCUT 3 +#define MCOPY 4 +#define MPSTE 5 + const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { /* Keymap 0: Basic layer * @@ -59,7 +65,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_BSPC, KC_LSFT, KC_A, KC_S, KC_D, KC_F, KC_G, KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_ENT, - KC_LCTL, M(2), KC_LGUI,KC_MPLY,ALT_T(KC_APP), + KC_LCTL, M(MFNLR), KC_LGUI,KC_MPLY,ALT_T(KC_APP), ALT_T(KC_ESC), TG(1), KC_PGUP, @@ -114,7 +120,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { KC_TRNS, KC_TRNS, KC_HOME, KC_P7, KC_P8, KC_P9, KC_PPLS, KC_UP, KC_END, KC_P4, KC_P5, KC_P6, KC_PPLS, KC_LEFT, KC_DOWN, KC_RGHT, KC_P1, KC_P2, KC_P3, KC_PENT, - KC_TRNS, KC_P0, M(1), KC_PDOT, CTL_T(KC_PENT), + KC_TRNS, KC_P0, M(MDBL0),KC_PDOT, CTL_T(KC_PENT), KC_NLCK, KC_CAPS, KC_TRNS, @@ -146,7 +152,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_INS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_VOLU, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, LSFT(KC_DELT),LCTL(KC_INS),LSFT(KC_INS), KC_MUTE, KC_VOLD, + KC_TRNS, KC_TRNS, M(MCUT), M(MCOPY), M(MPSTE), KC_MUTE, KC_VOLD, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, @@ -172,21 +178,29 @@ 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; - case 1: + case MDBL0: if (record->event.pressed) { return MACRO( I(25), T(P0), T(P0), END ); } break; - case 2: + case MFNLR: layer_state ^= (1 << NMBR) | (1 << FNLR); break; + case MCUT: + if (record->event.pressed) { + return MACRO(D(LSFT), T(DELT), U(LSFT), END); + } + break; + case MCOPY: + if (record->event.pressed) { + return MACRO(D(LCTL), T(INS), U(LCTL), END); + } + break; + case MPSTE: + if (record->event.pressed) { + return MACRO(D(LSFT), T(INS), U(LSFT), END); + } + break; } return MACRO_NONE; }; -- cgit v1.2.3 From 29de37d5c0ea9fc6b5539ce4493c7b10a2a7f33f Mon Sep 17 00:00:00 2001 From: Jack Humbert Date: Mon, 11 Jan 2016 16:53:33 -0500 Subject: pwm audio --- keyboard/ergodox_ez/keymaps/keymap_generated.c | 78 ++++++++++++++++++++++++++ keyboard/ergodox_ez/keymaps/keymap_jack.c | 69 +---------------------- keyboard/planck/Makefile | 4 +- keyboard/planck/keymaps/keymap_eric.c | 42 ++++++++++++++ keyboard/planck/keymaps/keymap_lock.c | 10 ++-- keyboard/planck/planck.c | 29 ++++++++++ keyboard/planck/planck.h | 5 +- 7 files changed, 161 insertions(+), 76 deletions(-) create mode 100644 keyboard/ergodox_ez/keymaps/keymap_generated.c create mode 100644 keyboard/planck/keymaps/keymap_eric.c (limited to 'keyboard') diff --git a/keyboard/ergodox_ez/keymaps/keymap_generated.c b/keyboard/ergodox_ez/keymaps/keymap_generated.c new file mode 100644 index 0000000000..54fd3059f2 --- /dev/null +++ b/keyboard/ergodox_ez/keymaps/keymap_generated.c @@ -0,0 +1,78 @@ +#include "ergodox_ez.h" +#include "debug.h" +#include "action_layer.h" + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + +// If it accepts an argument (i.e, is a function), it doesn't need KC_. +// Otherwise, it needs KC_* + +#define SYMB 0 + +[0] = KEYMAP( \ +\ +KC_KP_EQUAL, KC_1, KC_2, KC_3, KC_4, KC_5, KC_LEFT, KC_DELETE, KC_Q, KC_W, KC_E, KC_R, KC_T, TG(1), KC_BSPACE, KC_A, KC_S, KC_D, KC_F, KC_G, KC_LSHIFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TAB, KC_LEFT, KC_RIGHT, KC_TRANSPARENT, KC_LGUI, KC_HOME, KC_SPACE, KC_BSPACE, KC_END, KC_RIGHT, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINUS, TG(1), KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSLASH, KC_H, KC_J, KC_K, KC_L, KC_SCOLON, KC_QUOTE, KC_TRANSPARENT, KC_N, KC_M, KC_COMMA, KC_DOT, KC_LCTRL, KC_LSHIFT, KC_UP, KC_DOWN, KC_LBRACKET, KC_RBRACKET, KC_TRANSPARENT, KC_LALT, KC_ESCAPE, KC_PGUP, KC_PGDOWN, KC_TAB, KC_ENTER \ +\ +), + +[1] = KEYMAP( \ +\ +KC_TRANSPARENT, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_TRANSPARENT, KC_UP, KC_KP_7, KC_KP_8, KC_KP_9, KC_KP_ASTERISK, KC_F12, KC_DOWN, KC_KP_4, KC_KP_5, KC_KP_6, KC_KP_PLUS, KC_TRANSPARENT, KC_TRANSPARENT, , KC_KP_1, KC_KP_2, KC_KP_3, KC_KP_SLASH, KC_TRANSPARENT, KC_TRANSPARENT, KC_KP_DOT, KC_KP_0, KC_KP_EQUAL, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT \ +\ +), + +[2] = KEYMAP( \ +\ +KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_MS_UP, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_MS_LEFT, KC_MS_DOWN, KC_MS_RIGHT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_MS_BTN3, KC_MS_BTN2, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_MEDIA_PLAY_PAUSE, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_MEDIA_PREV_TRACK, KC_MEDIA_NEXT_TRACK, KC_TRANSPARENT, KC_TRANSPARENT, KC_AUDIO_VOL_UP, KC_AUDIO_VOL_DOWN, KC_AUDIO_MUTE, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT \ +\ +), + +}; + +const uint16_t PROGMEM fn_actions[] = { + [1] = ACTION_LAYER_TAP_TOGGLE(SYMB) // FN1 - Momentary Layer 1 (Symbols) +}; + +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; +}; + +// 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/keyboard/ergodox_ez/keymaps/keymap_jack.c b/keyboard/ergodox_ez/keymaps/keymap_jack.c index 2677a3d8fa..f8f73a1afd 100644 --- a/keyboard/ergodox_ez/keymaps/keymap_jack.c +++ b/keyboard/ergodox_ez/keymaps/keymap_jack.c @@ -8,29 +8,6 @@ #define MDIA 2 // media keys const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { -/* Keymap 0: Basic layer - * - * ,--------------------------------------------------. ,--------------------------------------------------. - * | = | 1 | 2 | 3 | 4 | 5 | LEFT | | RIGHT| 6 | 7 | 8 | 9 | 0 | - | - * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| - * | Del | Q | W | E | R | T | L1 | | L1 | Y | U | I | O | P | \ | - * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| - * | BkSp | A | S | D | F | G |------| |------| H | J | K | L |; / L2| ' | - * |--------+------+------+------+------+------| Hyper| | Meh |------+------+------+------+------+--------| - * | LShift |Z/Ctrl| X | C | V | B | | | | N | M | , | . |//Ctrl| RShift | - * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' - * |Grv/L1| '" |AltShf| Left | Right| | Up | Down | [ | ] | ~L1 | - * `----------------------------------' `----------------------------------' - * ,-------------. ,-------------. - * | App | LGui | | Alt |Ctrl/Esc| - * ,------|------|------| |------+--------+------. - * | | | Home | | PgUp | | | - * | Space|Backsp|------| |------| Tab |Enter | - * | |ace | End | | PgDn | | | - * `--------------------' `----------------------' - */ -// If it accepts an argument (i.e, is a function), it doesn't need KC_. -// Otherwise, it needs KC_* [BASE] = KEYMAP( // layer 0 : default // left hand KC_NO, KC_1, KC_2, KC_3, KC_4, KC_5, KC_NO, @@ -51,28 +28,6 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { KC_PGUP, KC_PGDN, KC_SPC,KC_SPC ), -/* Keymap 1: Symbol Layer - * - * ,--------------------------------------------------. ,--------------------------------------------------. - * | | F1 | F2 | F3 | F4 | F5 | | | | F6 | F7 | F8 | F9 | F10 | F11 | - * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| - * | | ! | @ | { | } | | | | | | Up | 7 | 8 | 9 | * | F12 | - * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| - * | | # | $ | ( | ) | ` |------| |------| Down | 4 | 5 | 6 | + | | - * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| - * | | % | ^ | [ | ] | ~ | | | | & | 1 | 2 | 3 | \ | | - * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' - * | | | | | | | | . | 0 | = | | - * `----------------------------------' `----------------------------------' - * ,-------------. ,-------------. - * | | | | | | - * ,------|------|------| |------+------+------. - * | | | | | | | | - * | | |------| |------| | | - * | | | | | | | | - * `--------------------' `--------------------' - */ -// SYMBOLS [SYMB] = KEYMAP( // left hand KC_TRNS,KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_TRNS, @@ -93,29 +48,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS ), -/* Keymap 2: Media and mouse keys - * - * ,--------------------------------------------------. ,--------------------------------------------------. - * | | | | | | | | | | | | | | | | - * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| - * | | | | MsUp | | | | | | | | | | | | - * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| - * | | |MsLeft|MsDown|MsRght| |------| |------| | | | | | Play | - * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| - * | | | | | | | | | | | | Prev | Next | | | - * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' - * | | | | Lclk | Rclk | |VolUp |VolDn | Mute | | | - * `----------------------------------' `----------------------------------' - * ,-------------. ,-------------. - * | | | | | | - * ,------|------|------| |------+------+------. - * | | | | | | |Brwser| - * | | |------| |------| |Back | - * | | | | | | | | - * `--------------------' `--------------------' - */ -// MEDIA AND MOUSE -KEYMAP( +[MDIA] = KEYMAP( KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_TRNS, KC_TRNS, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, diff --git a/keyboard/planck/Makefile b/keyboard/planck/Makefile index 485c5f77f6..fdf8c16400 100644 --- a/keyboard/planck/Makefile +++ b/keyboard/planck/Makefile @@ -122,8 +122,8 @@ 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 = yes # Breathing sleep LED during USB suspend # NKRO_ENABLE = yes # USB Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work -BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality -# MIDI_ENABLE = YES # MIDI controls +# BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality +MIDI_ENABLE = YES # MIDI controls # UNICODE_ENABLE = YES # Unicode # BLUETOOTH_ENABLE = yes # Enable Bluetooth with the Adafruit EZ-Key HID diff --git a/keyboard/planck/keymaps/keymap_eric.c b/keyboard/planck/keymaps/keymap_eric.c new file mode 100644 index 0000000000..ffeec5f805 --- /dev/null +++ b/keyboard/planck/keymaps/keymap_eric.c @@ -0,0 +1,42 @@ +#include "planck.h" + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + [0] = { + {KC_BSLS, S(KC_SLSH), KC_COMM, KC_DOT, KC_P, KC_Y, KC_F, KC_G, KC_C, KC_R, KC_L, KC_SLSH}, + {TG(1), KC_A, KC_O, KC_E, KC_U, KC_I, KC_D, KC_H, KC_T, KC_N, KC_S, KC_MINS}, + {KC_LGUI, KC_QUOT, KC_Q, KC_J, KC_K, KC_X, KC_B, KC_M, KC_W, KC_V, KC_Z, KC_RGUI}, + {KC_LCBR, KC_LCTL, KC_LALT, LT(1, TG(2)), KC_SPC, KC_TAB, KC_ENT, KC_BSPC, LT(1, TG(3)), KC_RALT, KC_RCTL, KC_RCBR} + }, + + [1] = { + {KC_PIPE, KC_COLN, KC_LBRC, KC_RBRC, S(KC_P), S(KC_Y), S(KC_F), S(KC_G), S(KC_C), S(KC_R), S(KC_L), KC_AMPR}, + {KC_TRNS, S(KC_A), S(KC_O), S(KC_E), S(KC_U), S(KC_I), S(KC_D), S(KC_H), S(KC_T), S(KC_N), S(KC_S), KC_GRV}, + {KC_TRNS, KC_SCLN, S(KC_Q), S(KC_J), S(KC_K), S(KC_X), S(KC_B), S(KC_M), S(KC_W), S(KC_V), S(KC_Z), KC_TRNS}, + {S(KC_COMM), KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, S(KC_DOT)} + }, + + [2] = { + {KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_NO}, + {KC_NO, KC_F11, KC_F12, KC_F13, KC_F14, KC_F15, KC_F16, KC_F17, KC_F18, KC_F19, KC_F20, KC_NO}, + {KC_TRNS, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_TRNS}, + {KC_NO, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_NO} + }, + + [3] = { + {KC_EXLM, KC_7, KC_5, KC_3, KC_1, KC_9, KC_0, KC_2, KC_4, KC_6, KC_8, KC_EQL}, + {TG(4), KC_NO, KC_PGUP, KC_HOME, KC_INSERT, KC_NO, KC_NO, BL_DEC, KC_UP, BL_INC, KC_NO, KC_NO}, + {KC_TRNS, KC_NO, KC_PGDN, KC_END, KC_DELETE, KC_NO, KC_NO, KC_LEFT, KC_DOWN, KC_RGHT, KC_NO, KC_TRNS}, + {KC_NO, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_NO} + }, + + [4] = { + {KC_TILD, KC_HASH, KC_LPRN, KC_RPRN, S(KC_QUOT), KC_PERC, KC_UNDS, KC_CIRC, KC_DLR, KC_AT, KC_ASTR, KC_PLUS}, + {KC_TRNS, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO}, + {KC_TRNS, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_TRNS}, + {KC_NO, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_NO} + } +}; + +const uint16_t PROGMEM fn_actions[] = { + +}; \ No newline at end of file diff --git a/keyboard/planck/keymaps/keymap_lock.c b/keyboard/planck/keymaps/keymap_lock.c index cc9be55f64..c2bf0b7d81 100644 --- a/keyboard/planck/keymaps/keymap_lock.c +++ b/keyboard/planck/keymaps/keymap_lock.c @@ -1,5 +1,5 @@ #include "keymap_common.h" -#include "backlight.h" +// #include "backlight.h" #include "action_layer.h" #include "keymap_midi.h" #include @@ -71,7 +71,7 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) if (record->event.pressed) { // play_note(440, 20); // register_code(KC_RSFT); - backlight_set(BACKLIGHT_LEVELS); + // backlight_set(BACKLIGHT_LEVELS); default_layer_and(0); default_layer_or((1<<5)); @@ -106,9 +106,9 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) // note(0+12, 20); // note(0+24, 20); } else { - // unregister_code(KC_RSFT); - // stop_note(); - backlight_set(0); + unregister_code(KC_RSFT); + // stop_all_notes(); + // backlight_set(0); default_layer_and(0); default_layer_or(0); // note(0+24, 20); diff --git a/keyboard/planck/planck.c b/keyboard/planck/planck.c index b62862af04..a986bd8812 100644 --- a/keyboard/planck/planck.c +++ b/keyboard/planck/planck.c @@ -19,6 +19,35 @@ void * matrix_init_kb(void) { DDRE |= (1<<6); PORTE |= (1<<6); + init_notes(); + + // play_note(((double)261.6*32)*pow(2.0,(36)/12.0), 0xF); + // _delay_ms(50); + + // play_note(((double)261.6*32)*pow(2.0,(48)/12.0), 0xF); + // _delay_ms(25); + // stop_note(((double)261.6*32)*pow(2.0,(48)/12.0)); + + // play_note(((double)261.6*32)*pow(2.0,(48)/12.0), 0xF); + // _delay_ms(25); + // stop_note(((double)261.6*32)*pow(2.0,(48)/12.0)); + + + // stop_note(((double)261.6*32)*pow(2.0,(36)/12.0)); + + + // play_note(((double)261.6*32)*pow(2.0,(62)/12.0), 0xF); + // _delay_ms(50); + // stop_note(((double)261.6*32)*pow(2.0,(62)/12.0)); + + + // play_note(((double)261.6*32)*pow(2.0,(64)/12.0), 0xF); + // _delay_ms(50); + // stop_note(((double)261.6*32)*pow(2.0,(64)/12.0)); + + + + if (matrix_init_user) { (*matrix_init_user)(); } diff --git a/keyboard/planck/planck.h b/keyboard/planck/planck.h index 4e59aef566..32c08f3b0b 100644 --- a/keyboard/planck/planck.h +++ b/keyboard/planck/planck.h @@ -3,8 +3,11 @@ #include "matrix.h" #include "keymap_common.h" -#include "backlight.h" +// #include "backlight.h" #include +#ifdef MIDI_ENABLE + #include +#endif #define PLANCK_MIT( \ k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, \ -- cgit v1.2.3 From 263344d42f8b16e1cd80c4c871e15fa86208d086 Mon Sep 17 00:00:00 2001 From: Jack Humbert Date: Mon, 11 Jan 2016 18:00:07 -0500 Subject: beeps on lock keymap --- keyboard/planck/keymaps/keymap_lock.c | 32 +++++++++++++++++++++++++++++++- keyboard/planck/planck.c | 29 ----------------------------- 2 files changed, 31 insertions(+), 30 deletions(-) (limited to 'keyboard') diff --git a/keyboard/planck/keymaps/keymap_lock.c b/keyboard/planck/keymaps/keymap_lock.c index c2bf0b7d81..c8e1b8fa86 100644 --- a/keyboard/planck/keymaps/keymap_lock.c +++ b/keyboard/planck/keymaps/keymap_lock.c @@ -107,7 +107,7 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) // note(0+24, 20); } else { unregister_code(KC_RSFT); - // stop_all_notes(); + stop_all_notes(); // backlight_set(0); default_layer_and(0); default_layer_or(0); @@ -119,3 +119,33 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) } return MACRO_NONE; }; + + +void * matrix_init_user(void) { + init_notes(); + + play_note(((double)261.6*3)*pow(2.0,(36)/12.0), 0xF); + _delay_ms(50); + + play_note(((double)261.6*3)*pow(2.0,(48)/12.0), 0xF); + _delay_ms(25); + stop_note(((double)261.6*3)*pow(2.0,(48)/12.0)); + + play_note(((double)261.6*3)*pow(2.0,(48)/12.0), 0xF); + _delay_ms(25); + stop_note(((double)261.6*3)*pow(2.0,(48)/12.0)); + + + stop_note(((double)261.6*3)*pow(2.0,(36)/12.0)); + + + play_note(((double)261.6*3)*pow(2.0,(62)/12.0), 0xF); + _delay_ms(50); + stop_note(((double)261.6*3)*pow(2.0,(62)/12.0)); + + + play_note(((double)261.6*3)*pow(2.0,(64)/12.0), 0xF); + _delay_ms(50); + stop_note(((double)261.6*3)*pow(2.0,(64)/12.0)); + +} diff --git a/keyboard/planck/planck.c b/keyboard/planck/planck.c index a986bd8812..b62862af04 100644 --- a/keyboard/planck/planck.c +++ b/keyboard/planck/planck.c @@ -19,35 +19,6 @@ void * matrix_init_kb(void) { DDRE |= (1<<6); PORTE |= (1<<6); - init_notes(); - - // play_note(((double)261.6*32)*pow(2.0,(36)/12.0), 0xF); - // _delay_ms(50); - - // play_note(((double)261.6*32)*pow(2.0,(48)/12.0), 0xF); - // _delay_ms(25); - // stop_note(((double)261.6*32)*pow(2.0,(48)/12.0)); - - // play_note(((double)261.6*32)*pow(2.0,(48)/12.0), 0xF); - // _delay_ms(25); - // stop_note(((double)261.6*32)*pow(2.0,(48)/12.0)); - - - // stop_note(((double)261.6*32)*pow(2.0,(36)/12.0)); - - - // play_note(((double)261.6*32)*pow(2.0,(62)/12.0), 0xF); - // _delay_ms(50); - // stop_note(((double)261.6*32)*pow(2.0,(62)/12.0)); - - - // play_note(((double)261.6*32)*pow(2.0,(64)/12.0), 0xF); - // _delay_ms(50); - // stop_note(((double)261.6*32)*pow(2.0,(64)/12.0)); - - - - if (matrix_init_user) { (*matrix_init_user)(); } -- cgit v1.2.3 From 4c100dbbef5b97290cbe6d4846575a940649c958 Mon Sep 17 00:00:00 2001 From: Jack Humbert Date: Wed, 13 Jan 2016 00:25:31 -0500 Subject: note seq, start-up beeps, function beeps --- keyboard/planck/keymaps/keymap_lock.c | 73 +++++++++++++++++++++++++++-------- 1 file changed, 57 insertions(+), 16 deletions(-) (limited to 'keyboard') diff --git a/keyboard/planck/keymaps/keymap_lock.c b/keyboard/planck/keymaps/keymap_lock.c index c8e1b8fa86..5e5390b036 100644 --- a/keyboard/planck/keymaps/keymap_lock.c +++ b/keyboard/planck/keymaps/keymap_lock.c @@ -2,6 +2,7 @@ // #include "backlight.h" #include "action_layer.h" #include "keymap_midi.h" +#include "beeps.h" #include const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { @@ -63,12 +64,26 @@ uint16_t hextokeycode(int hex) { } } +float walk_up[][2] = { + {440.0*pow(2.0,(60)/12.0), 400}, + {0, 50}, + {440.0*pow(2.0,(67)/12.0), 400}, +}; + +float walk_dn[][2] = { + {440.0*pow(2.0,(67)/12.0), 400}, + {0, 50}, + {440.0*pow(2.0,(60)/12.0), 400}, +}; + 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) { + + play_notes(&walk_up, 3, false); // play_note(440, 20); // register_code(KC_RSFT); // backlight_set(BACKLIGHT_LEVELS); @@ -107,7 +122,7 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) // note(0+24, 20); } else { unregister_code(KC_RSFT); - stop_all_notes(); + play_notes(&walk_dn, 3, false); // backlight_set(0); default_layer_and(0); default_layer_or(0); @@ -120,32 +135,58 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) return MACRO_NONE; }; +float start_up[][2] = { + {440.0*pow(2.0,(67)/12.0), 600}, + {0, 50}, + {440.0*pow(2.0,(64)/12.0), 400}, + {0, 50}, + {440.0*pow(2.0,(55)/12.0), 400}, + {0, 50}, + {440.0*pow(2.0,(60)/12.0), 400}, + {0, 50}, + {440.0*pow(2.0,(64)/12.0), 1000}, +}; void * matrix_init_user(void) { init_notes(); - play_note(((double)261.6*3)*pow(2.0,(36)/12.0), 0xF); - _delay_ms(50); + play_notes(&start_up, 9, false); + // play_note(((double)261.6*3)*pow(2.0,(36)/12.0), 0xF); + // _delay_ms(50); - play_note(((double)261.6*3)*pow(2.0,(48)/12.0), 0xF); - _delay_ms(25); - stop_note(((double)261.6*3)*pow(2.0,(48)/12.0)); + // play_note(((double)261.6*3)*pow(2.0,(48)/12.0), 0xF); + // _delay_ms(25); + // stop_note(((double)261.6*3)*pow(2.0,(48)/12.0)); - play_note(((double)261.6*3)*pow(2.0,(48)/12.0), 0xF); - _delay_ms(25); - stop_note(((double)261.6*3)*pow(2.0,(48)/12.0)); + // play_note(((double)261.6*3)*pow(2.0,(48)/12.0), 0xF); + // _delay_ms(25); + // stop_note(((double)261.6*3)*pow(2.0,(48)/12.0)); - stop_note(((double)261.6*3)*pow(2.0,(36)/12.0)); + // stop_note(((double)261.6*3)*pow(2.0,(36)/12.0)); - play_note(((double)261.6*3)*pow(2.0,(62)/12.0), 0xF); - _delay_ms(50); - stop_note(((double)261.6*3)*pow(2.0,(62)/12.0)); + // play_note(((double)261.6*3)*pow(2.0,(62)/12.0), 0xF); + // _delay_ms(50); + // stop_note(((double)261.6*3)*pow(2.0,(62)/12.0)); - play_note(((double)261.6*3)*pow(2.0,(64)/12.0), 0xF); - _delay_ms(50); - stop_note(((double)261.6*3)*pow(2.0,(64)/12.0)); + // play_note(((double)261.6*3)*pow(2.0,(64)/12.0), 0xF); + // _delay_ms(50); + // stop_note(((double)261.6*3)*pow(2.0,(64)/12.0)); } + + +// void * matrix_scan_user(void) { +// if (layer_state & (1<<2)) { +// if (!playing_notes) +// play_notes(&start_up, 9, true); +// } else if (layer_state & (1<<3)) { +// if (!playing_notes) +// play_notes(&start_up, 9, true); +// } else { +// if (playing_notes) +// stop_all_notes(); +// } +// } \ No newline at end of file -- cgit v1.2.3 From 93e350caa1f5ce704741a18e6e3106787b574406 Mon Sep 17 00:00:00 2001 From: Didier Loiseau Date: Sat, 16 Jan 2016 00:38:13 +0100 Subject: Added shifts on the thumbs --- keyboard/ergodox_ez/keymaps/keymap_typematrix.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'keyboard') diff --git a/keyboard/ergodox_ez/keymaps/keymap_typematrix.c b/keyboard/ergodox_ez/keymaps/keymap_typematrix.c index 7161a638a8..04d91b45bf 100644 --- a/keyboard/ergodox_ez/keymaps/keymap_typematrix.c +++ b/keyboard/ergodox_ez/keymaps/keymap_typematrix.c @@ -53,7 +53,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * |Esc/Alt| L1 | | Left |Right | * ,------+-------+------| |------+------+------. * | | | PgUp | | Up | | | - * |Space | Space |------| |------|Space |Space | + * |Space |LShift |------| |------|RShift|Space | * | | | PgDn | | Down | | | * `---------------------' `--------------------' */ @@ -69,7 +69,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { ALT_T(KC_ESC), TG(1), KC_PGUP, - KC_SPC, KC_SPC, KC_PGDN, + KC_SPC, KC_LSFT, KC_PGDN, // right hand KC_DELT, KC_6, KC_7, KC_8, KC_9, KC_0, KC_RBRC, @@ -80,7 +80,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { KC_LEFT, KC_RGHT, KC_UP, - KC_DOWN, KC_SPC, KC_SPC + KC_DOWN, KC_RSFT, KC_SPC ), /* Keymap 1: Numbers Layer * -- cgit v1.2.3 From 6e3c36360ed291b9ca2bd014571236308a933d0c Mon Sep 17 00:00:00 2001 From: Jack Humbert Date: Fri, 15 Jan 2016 23:10:30 -0500 Subject: sounds --- keyboard/planck/keymaps/keymap_lock.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'keyboard') diff --git a/keyboard/planck/keymaps/keymap_lock.c b/keyboard/planck/keymaps/keymap_lock.c index 5e5390b036..7a99b57c9d 100644 --- a/keyboard/planck/keymaps/keymap_lock.c +++ b/keyboard/planck/keymaps/keymap_lock.c @@ -67,13 +67,13 @@ uint16_t hextokeycode(int hex) { float walk_up[][2] = { {440.0*pow(2.0,(60)/12.0), 400}, {0, 50}, - {440.0*pow(2.0,(67)/12.0), 400}, + {440.0*pow(2.0,(67)/12.0), 600}, }; float walk_dn[][2] = { {440.0*pow(2.0,(67)/12.0), 400}, {0, 50}, - {440.0*pow(2.0,(60)/12.0), 400}, + {440.0*pow(2.0,(60)/12.0), 600}, }; const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) -- cgit v1.2.3 From 4faddd3449ca553e0d8b02ba91f9a34b534eebe7 Mon Sep 17 00:00:00 2001 From: Jack Humbert Date: Sat, 16 Jan 2016 00:06:51 -0500 Subject: working --- keyboard/planck/keymaps/keymap_lock.c | 2 ++ 1 file changed, 2 insertions(+) (limited to 'keyboard') diff --git a/keyboard/planck/keymaps/keymap_lock.c b/keyboard/planck/keymaps/keymap_lock.c index cc9be55f64..bc81adcf97 100644 --- a/keyboard/planck/keymaps/keymap_lock.c +++ b/keyboard/planck/keymaps/keymap_lock.c @@ -1,3 +1,5 @@ +// USING_MIDI +// USING_BACKLIGHT #include "keymap_common.h" #include "backlight.h" #include "action_layer.h" -- cgit v1.2.3 From dfe7004bc545ff7247a0dbef4788b9e1952f9c5d Mon Sep 17 00:00:00 2001 From: Jack Humbert Date: Sat, 16 Jan 2016 00:51:24 -0500 Subject: new keymap folder structure and makefile magic --- keyboard/planck/Makefile | 13 ++- keyboard/planck/README.md | 126 ++++++++++++++++-------- keyboard/planck/keymaps/alexey.c | 51 ++++++++++ keyboard/planck/keymaps/angerthosenear.c | 50 ++++++++++ keyboard/planck/keymaps/austin.c | 50 ++++++++++ keyboard/planck/keymaps/charlie.c | 54 ++++++++++ keyboard/planck/keymaps/daniel.c | 48 +++++++++ keyboard/planck/keymaps/david.c | 76 ++++++++++++++ keyboard/planck/keymaps/default.c | 68 +++++++++++++ keyboard/planck/keymaps/dzobert.c | 49 +++++++++ keyboard/planck/keymaps/gabriel.c | 108 ++++++++++++++++++++ keyboard/planck/keymaps/jack.c | 50 ++++++++++ keyboard/planck/keymaps/joe.c | 88 +++++++++++++++++ keyboard/planck/keymaps/keymap_alexey.c | 51 ---------- keyboard/planck/keymaps/keymap_angerthosenear.c | 50 ---------- keyboard/planck/keymaps/keymap_austin.c | 50 ---------- keyboard/planck/keymaps/keymap_charlie.c | 54 ---------- keyboard/planck/keymaps/keymap_daniel.c | 48 --------- keyboard/planck/keymaps/keymap_david.c | 76 -------------- keyboard/planck/keymaps/keymap_default.c | 68 ------------- keyboard/planck/keymaps/keymap_dzobert.c | 49 --------- keyboard/planck/keymaps/keymap_gabriel.c | 108 -------------------- keyboard/planck/keymaps/keymap_jack.c | 50 ---------- keyboard/planck/keymaps/keymap_joe.c | 88 ----------------- keyboard/planck/keymaps/keymap_kyle.c | 49 --------- keyboard/planck/keymaps/keymap_leo.c | 46 --------- keyboard/planck/keymaps/keymap_lock.c | 123 ----------------------- keyboard/planck/keymaps/keymap_max.c | 49 --------- keyboard/planck/keymaps/keymap_monkey.c | 76 -------------- keyboard/planck/keymaps/keymap_numpad.c | 26 ----- keyboard/planck/keymaps/kyle.c | 49 +++++++++ keyboard/planck/keymaps/leo.c | 46 +++++++++ keyboard/planck/keymaps/lock.c | 123 +++++++++++++++++++++++ keyboard/planck/keymaps/max.c | 49 +++++++++ keyboard/planck/keymaps/monkey.c | 76 ++++++++++++++ keyboard/planck/keymaps/numpad.c | 26 +++++ keyboard/planck/keymaps/test/default.c | 123 +++++++++++++++++++++++ 37 files changed, 1282 insertions(+), 1102 deletions(-) create mode 100644 keyboard/planck/keymaps/alexey.c create mode 100644 keyboard/planck/keymaps/angerthosenear.c create mode 100644 keyboard/planck/keymaps/austin.c create mode 100644 keyboard/planck/keymaps/charlie.c create mode 100644 keyboard/planck/keymaps/daniel.c create mode 100644 keyboard/planck/keymaps/david.c create mode 100644 keyboard/planck/keymaps/default.c create mode 100644 keyboard/planck/keymaps/dzobert.c create mode 100644 keyboard/planck/keymaps/gabriel.c create mode 100644 keyboard/planck/keymaps/jack.c create mode 100644 keyboard/planck/keymaps/joe.c delete mode 100644 keyboard/planck/keymaps/keymap_alexey.c delete mode 100644 keyboard/planck/keymaps/keymap_angerthosenear.c delete mode 100644 keyboard/planck/keymaps/keymap_austin.c delete mode 100644 keyboard/planck/keymaps/keymap_charlie.c delete mode 100644 keyboard/planck/keymaps/keymap_daniel.c delete mode 100644 keyboard/planck/keymaps/keymap_david.c delete mode 100644 keyboard/planck/keymaps/keymap_default.c delete mode 100644 keyboard/planck/keymaps/keymap_dzobert.c delete mode 100644 keyboard/planck/keymaps/keymap_gabriel.c delete mode 100644 keyboard/planck/keymaps/keymap_jack.c delete mode 100644 keyboard/planck/keymaps/keymap_joe.c delete mode 100644 keyboard/planck/keymaps/keymap_kyle.c delete mode 100644 keyboard/planck/keymaps/keymap_leo.c delete mode 100644 keyboard/planck/keymaps/keymap_lock.c delete mode 100644 keyboard/planck/keymaps/keymap_max.c delete mode 100644 keyboard/planck/keymaps/keymap_monkey.c delete mode 100644 keyboard/planck/keymaps/keymap_numpad.c create mode 100644 keyboard/planck/keymaps/kyle.c create mode 100644 keyboard/planck/keymaps/leo.c create mode 100644 keyboard/planck/keymaps/lock.c create mode 100644 keyboard/planck/keymaps/max.c create mode 100644 keyboard/planck/keymaps/monkey.c create mode 100644 keyboard/planck/keymaps/numpad.c create mode 100644 keyboard/planck/keymaps/test/default.c (limited to 'keyboard') diff --git a/keyboard/planck/Makefile b/keyboard/planck/Makefile index 485c5f77f6..f3537b2c7a 100644 --- a/keyboard/planck/Makefile +++ b/keyboard/planck/Makefile @@ -54,10 +54,19 @@ SRC = planck.c \ backlight.c ifdef KEYMAP - SRC := keymaps/keymap_$(KEYMAP).c $(SRC) +ifneq ("$(wildcard keymaps/$(KEYMAP).c)","") + KEYMAP_FILE = keymaps/$(KEYMAP).c else - SRC := keymaps/keymap_default.c $(SRC) + KEYMAP_FILE = keymaps/$(KEYMAP)/default.c endif +else +ifneq ("$(wildcard keymaps/default.c)","") + KEYMAP_FILE = keymaps/default.c +else + KEYMAP_FILE = keymaps/default/default.c +endif +endif +SRC := $(KEYMAP_FILE) $(SRC) CONFIG_H = config.h diff --git a/keyboard/planck/README.md b/keyboard/planck/README.md index 0003e765d4..5c3a52498a 100644 --- a/keyboard/planck/README.md +++ b/keyboard/planck/README.md @@ -3,29 +3,42 @@ Planck keyboard firmware DIY/Assembled compact ortholinear 40% keyboard by [Ortholinear Keyboards](http://ortholinearkeyboards.com). ## Quantum MK Firmware + You have access to a bunch of goodies! Check out the Makefile to enable/disable some of the features. Uncomment the `#` to enable them. Setting them to `no` does nothing and will only confuse future you. BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality MIDI_ENABLE = yes # MIDI controls - # UNICODE_ENABLE = yes # Unicode support + # UNICODE_ENABLE = yes # Unicode support - this is commented out, just as an example. You have to use #, not // BLUETOOTH_ENABLE = yes # Enable Bluetooth with the Adafruit EZ-Key HID -### Mod shortcuts +## Quick aliases to common actions + +Your keymap can include shortcuts to common operations (called "function actions" in tmk). + +### Switching and toggling layers + +`MO(layer)` - momentary switch to *layer*. As soon as you let go of the key, the layer is deactivated and you pop back out to the previous layer. When you apply this to a key, that same key must be set as `KC_TRNS` on the destination layer. Otherwise, you won't make it back to the original layer when you release the key (and you'll get a keycode sent). You can only switch to layers *above* your current layer. If you're on layer 0 and you use `MO(1)`, that will switch to layer 1 just fine. But if you include `MO(3)` on layer 5, that won't do anything for you -- because layer 3 is lower than layer 5 on the stack. + +`LT(layer, kc)` - momentary switch to *layer* when held, and *kc* when tapped. Like `MO()`, this only works upwards in the layer stack (`layer` must be higher than the current layer). + +`TG(layer)` - toggles a layer on or off. As with `MO()`, you should set this key as `KC_TRNS` in the destination layer so that tapping it again actually toggles back to the original layer. Only works upwards in the layer stack. -* `LSFT(kc)` - applies left shift to *kc* - `S(kc)` is an alias -* `RSFT(kc)` - applies right shift to *kc* -* `LCTL(kc)` - applies left control to *kc* -* `RCTL(kc)` - applies right control to *kc* -* `LALT(kc)` - applies left alt to *kc* -* `RALT(kc)` - applies right alt to *kc* -* `LGUI(kc)` - applies left gui (command/win) to *kc* -* `RGUI(kc)` - applies right gui (command/win) to *kc* +### Fun with modifier keys -You can also use more than one, like this: +* `LSFT(kc)` - applies left Shift to *kc* (keycode) - `S(kc)` is an alias +* `RSFT(kc)` - applies right Shift to *kc* +* `LCTL(kc)` - applies left Control to *kc* +* `RCTL(kc)` - applies right Control to *kc* +* `LALT(kc)` - applies left Alt to *kc* +* `RALT(kc)` - applies right Alt to *kc* +* `LGUI(kc)` - applies left GUI (command/win) to *kc* +* `RGUI(kc)` - applies right GUI (command/win) to *kc* - LALT(LGUI(KC_ESC)) +You can also chain these, like this: -The following shortcuts automatically add `LSFT()` to keycodes to get commonly used symbols. Their long names (see `quantum/keymap_common.h`) are also availble. + LALT(LCTL(KC_DEL)) -- this makes a key that sends Alt, Control, and Delete in a single keypress. + +The following shortcuts automatically add `LSFT()` to keycodes to get commonly used symbols. Their long names are also available and documented in `/quantum/keymap_common.h`. KC_TILD ~ KC_EXLM ! @@ -45,31 +58,71 @@ The following shortcuts automatically add `LSFT()` to keycodes to get commonly u KC_PIPE | KC_COLN : -### Function shortcuts +`MT(mod, kc)` - is *mod* (modifier key - MOD_LCTL, MOD_LSFT) when held, and *kc* when tapped. In other words, you can have a key that sends Esc (or the letter O or whatever) when you tap it, but works as a Control key or a Shift key when you hold it down. + +These are the values you can use for the `mod` in `MT()` (right-hand modifiers are not available): + + * MOD_LCTL + * MOD_LSFT + * MOD_LALT + * MOD_LGUI -Instead of using `FNx`, you can use `F(x)` - the benefit here is being able to use more than 32 function layers (up to 4096), if you happen to need them. +These can also be combined like `MOD_LCTL | MOD_LSFT` e.g. `MT(MOD_LCTL | MOD_LSFT, KC_ESC)` which would activate Control and Shift when held, and send Escape when tapped. -There are also keycode shortcuts for common actions: +We've added shortcuts to make common modifier/tap (mod-tap) mappings more compact: -* `MO(layer)` - momentary switch to *layer* -* `DF(layer)` - sets default layer to *layer* -* `TG(layer)` - toggle between the current layer and *layer* -* `MT(mod, kc)` - is *mod* when held, and *kc* when tapped * `CTL_T(kc)` - is LCTL when held and *kc* when tapped * `SFT_T(kc)` - is LSFT when held and *kc* when tapped * `ALT_T(kc)` - is LALT when held and *kc* when tapped * `GUI_T(kc)` - is LGUI when held and *kc* when tapped - * `ALL_T(kc)` - is Hyper (all mods) when held and *kc* when tapped -* `LT(layer, kc)` - momentary switch to *layer* when held, and *kc* when tapped + * `ALL_T(kc)` - is Hyper (all mods) when held and *kc* when tapped. To read more about what you can do with a Hyper key, see [this blog post by Brett Terpstra](http://brettterpstra.com/2012/12/08/a-useful-caps-lock-key/) + +### Temporarily setting the default layer + +`DF(layer)` - sets default layer to *layer*. The default layer is the one at the "bottom" of the layer stack - the ultimate fallback layer. This currently does not persist over power loss. When you plug the keyboard back in, layer 0 will always be the default. It is theoretically possible to work around that, but that's not what `DF` does. + +### Remember: These are just aliases -These functions work the same way that their `ACTION_*` functions do, and will require KC_TRNS on the layer being switched to - check out the default keymap for an example. +These functions work the same way that their `ACTION_*` functions do - they're just quick aliases. To dig into all of the tmk ACTION_* functions, please see the [TMK documentation](https://github.com/jackhumbert/qmk_firmware/blob/master/tmk_core/doc/keymap.md#2-action). -### Additional keycodes for software-implemented layouts (Colemak, Dvorak, etc) +Instead of using `FNx` when defining `ACTION_*` functions, you can use `F(x)` - the benefit here is being able to use more than 32 function actions (up to 4096), if you happen to need them. + +## Macro shortcuts: Send a whole string when pressing just one key + +Instead of using the `ACTION_MACRO` function, you can simply use `M(n)` to access macro *n* - *n* will get passed into the `action_get_macro` as the `id`, and you can use a switch statement to trigger it. This gets called on the keydown and keyup, so you'll need to use an if statement testing `record->event.pressed` (see keymaps/default.c). + +```c +const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) // this is the function signature -- just copy/paste it into your keymap file as it is. +{ + switch(id) { + case 0: // this would trigger when you hit a key mapped as M(0) + if (record->event.pressed) { + return MACRO( I(255), T(H), T(E), T(L), T(L), W(255), T(O), END ); // this sends the string 'hello' when the macro executes + } + break; + } + return MACRO_NONE; +}; +``` +A macro can include the following commands: + +* I() change interval of stroke in milliseconds. +* D() press key. +* U() release key. +* T() type key(press and release). +* W() wait (milliseconds). +* END end mark. + +So above you can see the stroke interval changed to 255ms between each keystroke, then a bunch of keys being typed, waits a while, then the macro ends. + +Note: Using macros to have your keyboard send passwords for you is a bad idea. + +### Additional keycode aliases for software-implemented layouts (Colemak, Dvorak, etc) Everything is assuming you're in Qwerty (in software) by default, but there is built-in support for using a Colemak or Dvorak layout by including this at the top of your keymap: - #include "keymap_.h" - + #include "keymap_.h" + Where is "colemak" or "dvorak". After including this line, you will get access to: * `CM_*` for all of the Colemak-equivalent characters @@ -79,19 +132,15 @@ These implementations assume you're using Colemak or Dvorak on your OS, not on y To give an example, if you're using software-implemented Colemak, and want to get an `F`, you would use `CM_F` - `KC_F` under these same circumstances would result in `T`. -### Additional language support +## Additional language support -In `quantum/keymap_extras/`, you'll see various language files - these work the same way as the alternative layout ones do. Most are defined by their two letter country/language code followed by an underscore and a 4-letter abbrivation of its name. `FR_UGRV` which will result in a `ù` when using a software-implemented AZERTY layout. It's currently difficult to send such characters in just the firmware (but it's being worked on - see Unicode support). +In `quantum/keymap_extras/`, you'll see various language files - these work the same way as the alternative layout ones do. Most are defined by their two letter country/language code followed by an underscore and a 4-letter abbreviation of its name. `FR_UGRV` which will result in a `ù` when using a software-implemented AZERTY layout. It's currently difficult to send such characters in just the firmware (but it's being worked on - see Unicode support). -### Unicode support +## Unicode support You can currently send 4 hex digits with your OS-specific modifier key (RALT for OSX with the "Unicode Hex Input" layout) - this is currently limited to supporting one OS at a time, and requires a recompile for switching. 8 digit hex codes are being worked on. The keycode function is `UC(n)`, where *n* is a 4 digit hexidecimal. Enable from the Makefile. -### Macro shortcuts - -Instead of using the `ACTION_MACRO` function, you can simply use `M(n)` to access macro *n* - *n* will get passed into the `action_get_macro` as the `id`, and you can use a switch statement to filter them. This gets called on the keydown and keyup, so you'll need to use an if statement testing `record->event.pressed` (see keymap_default.c). - -### Other keyboard shortcut keycodes +## Other firmware shortcut keycodes * `RESET` - puts the MCU in DFU mode for flashing new firmware (with `make dfu`) * `DEBUG` - the firmware into debug mode - you'll need hid_listen to see things @@ -105,12 +154,11 @@ Instead of using the `ACTION_MACRO` function, you can simply use `M(n)` to acces Enable the backlight from the Makefile. - -### MIDI functionalty +## MIDI functionalty This is still a WIP, but check out `quantum/keymap_midi.c` to see what's happening. Enable from the Makefile. -### Bluetooth functionality +## Bluetooth functionality This requires [some hardware changes](https://www.reddit.com/r/MechanicalKeyboards/comments/3psx0q/the_planck_keyboard_with_bluetooth_guide_and/?ref=search_posts), but can be enabled via the Makefile. The firmware will still output characters via USB, so be aware of this when charging via a computer. It would make sense to have a switch on the Bluefruit to turn it off at will. @@ -124,13 +172,13 @@ Depending on which keymap you would like to use, you will have to compile slight 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 file named `keymap_.c` and see keymap document (you can find in top README.md) and existent keymap files. +Several version of keymap are available in advance but you are recommended to define your favorite layout yourself. To define your own keymap create file 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 **__keymap\_\.c__** and are stored in the `keymaps` folder. +Keymaps follow the format **__.c__** and are stored in the `keymaps` folder. ### Notable forks (which some of the keymap files are from) - [Shane's Fork](https://github.com/shanecelis/tmk_keyboard/tree/master/keyboard/planck) diff --git a/keyboard/planck/keymaps/alexey.c b/keyboard/planck/keymaps/alexey.c new file mode 100644 index 0000000000..89af4112c6 --- /dev/null +++ b/keyboard/planck/keymaps/alexey.c @@ -0,0 +1,51 @@ +#include "keymap_common.h" +#include "planck.h" +#include "backlight.h" + +#define _QW 0 +#define _LW 1 +#define _RS 2 + +// This layout tries to imitate the Atreus keyboard + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { +[_QW] = { /* 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, MO(_LW)}, + {KC_TRNS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_TRNS}, + {M(0), KC_LGUI, KC_LALT, KC_LCTL, KC_LSFT, KC_SPC, KC_SPC, MO(_RS), KC_MINS, KC_QUOT, KC_ENT, KC_TRNS} +}, +[_RS] = { /* RAISE */ + {KC_TRNS, KC_EXLM, KC_AT, KC_LCBR, KC_RCBR, KC_PIPE, KC_PGUP, KC_7, KC_8, KC_9, KC_ASTR, KC_TRNS}, + {KC_TRNS, KC_HASH, KC_DLR, KC_LPRN, KC_RPRN, KC_GRV, KC_PGDN, KC_4, KC_5, KC_6, KC_PLUS, KC_TRNS}, + {KC_TRNS, KC_PERC, KC_CIRC, KC_LBRC, KC_RBRC, KC_TILD, KC_AMPR, KC_1, KC_2, KC_3, KC_BSLS, KC_TRNS}, + {KC_TRNS, KC_TRNS, KC_INS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_0, KC_EQL, KC_TRNS} +}, +[_LW] = { /* LOWER */ + {KC_TRNS, KC_INS, KC_HOME, KC_UP, KC_END, KC_PGUP, KC_TRNS, KC_F7, KC_F8, KC_F9, KC_F10, KC_TRNS}, + {KC_TRNS, KC_DELETE, KC_LEFT, KC_DOWN, KC_RGHT, KC_PGDN, KC_TRNS, KC_F4, KC_F5, KC_F6, KC_F11, KC_TRNS}, + {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_F1, KC_F2, KC_F3, KC_F12, KC_TRNS}, + {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_VOLD, KC_VOLU, KC_MNXT, KC_MPLY, KC_TRNS} +} +}; + +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); + backlight_step(); + } else { + unregister_code(KC_RSFT); + } + break; + } + return MACRO_NONE; +}; + diff --git a/keyboard/planck/keymaps/angerthosenear.c b/keyboard/planck/keymaps/angerthosenear.c new file mode 100644 index 0000000000..cdf60632e4 --- /dev/null +++ b/keyboard/planck/keymaps/angerthosenear.c @@ -0,0 +1,50 @@ +#include "keymap_common.h" + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { +[0] = { /* Qwerty */ + {KC_ESC, 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_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, 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_QUOT}, + {KC_LCTL, KC_LGUI, KC_LALT, BL_STEP, FUNC(2), KC_SPC, KC_SPC, FUNC(1), KC_LEFT, KC_DOWN, KC_UP, KC_RGHT} + // Space is repeated to accommadate for both spacebar wiring positions +}, +[1] = { /* WASD + NumPad */ + {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_P7, KC_P8, KC_P9, KC_PSLS, KC_PMNS, KC_TRNS}, + {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_P4, KC_P5, KC_P6, KC_PAST, KC_PPLS, KC_TRNS}, + {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_P1, KC_P2, KC_P3, KC_PDOT, KC_PENT, KC_TRNS}, + {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, FUNC(2), KC_SPC, KC_P0, FUNC(1), KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS} +}, +[2] = { /* RAISE */ + {KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_TRNS}, + {KC_TRNS, FUNC(3), FUNC(4), LSFT(RSFT(KC_PAUSE)), KC_TRNS, KC_TRNS, KC_TRNS, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS}, + {KC_TRNS, KC_F11, KC_F12, KC_F13, KC_F14, KC_F15, KC_F16, KC_F17, KC_F18, KC_F19, KC_F20, KC_TRNS}, + {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MPRV, FUNC(1), KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY} +}, +[3] = { /* LOWER */ + {S(KC_GRV), S(KC_1), S(KC_2), S(KC_3), S(KC_4), S(KC_5), S(KC_6), S(KC_7), S(KC_8), S(KC_9), S(KC_0), KC_DEL}, + {KC_TRNS, FUNC(3), FUNC(4), LSFT(RSFT(KC_PAUSE)), KC_TRNS, KC_TRNS, KC_TRNS, S(KC_MINS), S(KC_EQL), S(KC_LBRC), S(KC_RBRC), S(KC_BSLS)}, + {KC_TRNS, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_TRNS}, + {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, FUNC(2), KC_TRNS, KC_TRNS, KC_TRNS, KC_HOME, KC_PGDN, KC_PGUP, KC_END} +} +}; + + +const uint16_t PROGMEM fn_actions[] = { + [1] = ACTION_LAYER_MOMENTARY(2), // to RAISE + [2] = ACTION_LAYER_MOMENTARY(3), // to LOWER + + [3] = ACTION_DEFAULT_LAYER_SET(0), + [4] = ACTION_DEFAULT_LAYER_SET(1), + +}; + +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: + return MACRODOWN(T(CM_T), END); + break; + } + return MACRO_NONE; +}; diff --git a/keyboard/planck/keymaps/austin.c b/keyboard/planck/keymaps/austin.c new file mode 100644 index 0000000000..49fc98a587 --- /dev/null +++ b/keyboard/planck/keymaps/austin.c @@ -0,0 +1,50 @@ +#include "keymap_common.h" + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { +[0] = { /* 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}, + {BL_STEP, KC_LGUI, KC_LALT, KC_LCTL, FUNC(2), KC_SPC, KC_SPC, FUNC(1), KC_LEFT, KC_DOWN, KC_UP, KC_RGHT} + // Space is repeated to accommadate for both spacebar wiring positions +}, +[1] = { /* 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}, + {KC_FN3, KC_LGUI, KC_LALT, KC_LCTL, FUNC(2), KC_SPC, KC_SPC, FUNC(1), KC_LEFT, KC_DOWN, KC_UP, KC_RGHT} +}, +[2] = { /* 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_TRNS, FUNC(3), FUNC(4), LSFT(RSFT(KC_PAUSE)), KC_TRNS, KC_TRNS, KC_TRNS, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS}, + {KC_TRNS, KC_F11, KC_F12, KC_F13, KC_F14, KC_F15, KC_F16, KC_F17, KC_F18, KC_F19, KC_F20, KC_TRNS}, + {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, FUNC(1), KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY} +}, +[3] = { /* LOWER */ + {S(KC_GRV), S(KC_1), S(KC_2), S(KC_3), S(KC_4), S(KC_5), S(KC_6), S(KC_7), S(KC_8), S(KC_9), S(KC_0), KC_BSPC}, + {KC_TRNS, FUNC(3), FUNC(4), LSFT(RSFT(KC_PAUSE)), KC_TRNS, KC_TRNS, KC_TRNS, S(KC_MINS), S(KC_EQL), S(KC_LBRC), S(KC_RBRC), S(KC_BSLS)}, + {KC_TRNS, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_TRNS}, + {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, FUNC(2), KC_TRNS, KC_TRNS, KC_TRNS, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY} +} +}; + + +const uint16_t PROGMEM fn_actions[] = { + [1] = ACTION_LAYER_MOMENTARY(2), // to RAISE + [2] = ACTION_LAYER_MOMENTARY(3), // to LOWER + + [3] = ACTION_DEFAULT_LAYER_SET(0), + [4] = ACTION_DEFAULT_LAYER_SET(1), + +}; + +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: + return MACRODOWN(T(CM_T), END); + break; + } + return MACRO_NONE; +}; diff --git a/keyboard/planck/keymaps/charlie.c b/keyboard/planck/keymaps/charlie.c new file mode 100644 index 0000000000..88f454d789 --- /dev/null +++ b/keyboard/planck/keymaps/charlie.c @@ -0,0 +1,54 @@ +#include "keymap_common.h" + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + [0] = { /* Native */ + {KC_ESC, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, FUNC(2)}, + {KC_BSPC, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT}, + {KC_TAB, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT}, + {KC_DEL, KC_LCTL, KC_NO, KC_LSFT, KC_LALT, KC_SPC, KC_NO, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT} +}, + [1] = { /* QWERTY->PHOTOSHOP */ + {KC_DELETE, KC_0, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, FUNC(1)}, + {KC_O, KC_G, KC_S, KC_U, KC_T, FUNC(27), KC_F21, KC_F10, KC_F11, KC_F7, KC_F8, KC_F9}, + {KC_TAB, FUNC(4), FUNC(5), FUNC(6), KC_F1, FUNC(7), KC_F18, KC_F19, KC_F23, KC_F20, KC_F22, FUNC(9)}, + {KC_COMM, KC_DOT, KC_R, FUNC(11), FUNC(3), KC_SPC, FUNC(12), KC_F2, FUNC(8), KC_F3, KC_F14} + }, + [2] = { /* 2: FUNC(3 PHOTOSHOP */ + {KC_ESC, FUNC(25), FUNC(26), KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO}, + {KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, FUNC(19), FUNC(20), FUNC(21)}, + {KC_C, KC_NO, FUNC(22), FUNC(5), KC_NO, FUNC(23), KC_NO, KC_NO, KC_NO, KC_NO, FUNC(13), KC_NO}, + {FUNC(14), FUNC(15), FUNC(16), FUNC(17), FUNC(3), KC_SPC, FUNC(18), KC_NO, KC_NO, KC_F24, KC_NO} + } +}; + +const uint16_t PROGMEM fn_actions[] = { + [1] = ACTION_DEFAULT_LAYER_SET(0), // set Qwerty layout + [2] = ACTION_DEFAULT_LAYER_SET(1), // set Photoshop presets + [3] = ACTION_LAYER_MOMENTARY(2), // Photoshop function layer + + [4] = ACTION_MODS_KEY(MOD_LSFT | MOD_LCTL | MOD_LALT, KC_F9), // photo folder AHK + [5] = ACTION_MODS_KEY(MOD_LSFT | MOD_LCTL, KC_I), // select inverse + [6] = ACTION_MODS_KEY(MOD_LSFT, KC_M), // marquee select + [7] = ACTION_MODS_KEY(MOD_LALT, KC_BSPC), // fill + [8] = ACTION_MODS_KEY(MOD_LSFT | MOD_LCTL | MOD_LALT, KC_X), // warp + [9] = ACTION_MODS_KEY(MOD_LCTL | MOD_LALT | MOD_LSFT, KC_F12), // merge all new layer + [10] = ACTION_MODS_KEY(MOD_LCTL, KC_MINS), // zoom out + [11] = ACTION_MODS_KEY(MOD_LCTL, KC_H), // RBG sliders + [12] = ACTION_MODS_KEY(MOD_LCTL, KC_S), // save + [13] = ACTION_MODS_KEY(MOD_LSFT | MOD_LCTL, KC_F5), // layer mask from transparancy + [14] = ACTION_MODS_KEY(MOD_LCTL, KC_F2), // stroke + [15] = ACTION_MODS_KEY(MOD_LCTL | MOD_LSFT, KC_F2), // stroke layer + [16] = ACTION_MODS_KEY(MOD_LCTL, KC_0), // zoom 0 + [17] = ACTION_MODS_KEY(MOD_LSFT | MOD_LCTL, KC_H), // HSV sliders + [18] = ACTION_MODS_KEY(MOD_LCTL | MOD_LSFT, KC_S), // save as + [19] = ACTION_MODS_KEY(MOD_LSFT | MOD_LCTL | MOD_LALT, KC_F7), // gaussian blur + [20] = ACTION_MODS_KEY(MOD_LSFT | MOD_LCTL | MOD_LALT, KC_F8), // motion blur + [21] = ACTION_MODS_KEY(MOD_LSFT | MOD_LCTL, KC_X), // liquify filter + [22] = ACTION_MODS_KEY(MOD_LSFT, KC_MINS), // prev layer blending + [23] = ACTION_MODS_KEY(MOD_LSFT | MOD_LCTL, KC_BSPC), // KC_NOrmal layer blending + [24] = ACTION_MODS_KEY(MOD_LSFT, KC_EQL), // next layer blending + [25] = ACTION_MODS_KEY(MOD_LCTL, KC_Z), // step back + [26] = ACTION_MODS_KEY(MOD_LCTL, KC_Y), // step forward + [27] = ACTION_MODS_KEY(MOD_LCTL, KC_R), // rasterize + +}; diff --git a/keyboard/planck/keymaps/daniel.c b/keyboard/planck/keymaps/daniel.c new file mode 100644 index 0000000000..234e48ff4a --- /dev/null +++ b/keyboard/planck/keymaps/daniel.c @@ -0,0 +1,48 @@ +#include "keymap_common.h" + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { +[0] = { /* Qwerty */ + {KC_ESC, 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_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_RSFT}, + {FUNC(3), KC_LCTL, KC_LALT, KC_LGUI, FUNC(2), KC_SPC, KC_SPC, FUNC(1), KC_LEFT, KC_DOWN, KC_UP, KC_RGHT} + // Space is repeated to accommadate for both spacebar wiring positions +}, +[1] = { /* RAISE */ + {KC_GRV, S(KC_1), S(KC_2), S(KC_3), S(KC_4), S(KC_5), S(KC_6), S(KC_7), S(KC_8), S(KC_9), S(KC_0), KC_EQL}, + {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_LBRC, KC_RBRC}, + {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MINS, S(KC_MINS), KC_BSLS, KC_TRNS}, + {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, FUNC(1), KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY} +}, +[2] = { /* LOWER */ + {S(KC_GRV), KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, S(KC_EQL)}, + {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_CAPS, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_ENT}, + {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, FUNC(2), KC_TRNS, KC_TRNS, KC_TRNS, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY} +}, +[3] = { /* Qwerty */ + {KC_ESC, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_DEL}, + {KC_TAB, 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_RSFT}, + {KC_TRNS, KC_LCTL, KC_LALT, KC_LGUI, FUNC(2), KC_SPC, KC_SPC, FUNC(1), KC_LEFT, KC_DOWN, KC_UP, KC_RGHT} + // Space is repeated to accommadate for both spacebar wiring positions +} +}; + + +const uint16_t PROGMEM fn_actions[] = { + [1] = ACTION_LAYER_MOMENTARY(1), // to RAISE + [2] = ACTION_LAYER_MOMENTARY(2), // to LOWER + [3] = ACTION_LAYER_MOMENTARY(3) // to LOWER +}; + +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: + return MACRODOWN(T(CM_T), END); + break; + } + return MACRO_NONE; +}; diff --git a/keyboard/planck/keymaps/david.c b/keyboard/planck/keymaps/david.c new file mode 100644 index 0000000000..f483084801 --- /dev/null +++ b/keyboard/planck/keymaps/david.c @@ -0,0 +1,76 @@ +#include "keymap_common.h" +#include "beeps.h" + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { +[0] = { /* Qwerty */ + {KC_Q, KC_W, KC_E, KC_R, KC_T, KC_BSPC, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC}, + {KC_A, KC_S, KC_D, KC_F, KC_G, KC_ENT, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT}, + {KC_Z, KC_X, KC_C, KC_V, KC_B, KC_ESC, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT}, + {M(10), KC_LCTL, KC_LALT, KC_LGUI, FUNC(2), KC_SPC, KC_SPC, FUNC(1), KC_LEFT, KC_DOWN, KC_UP, KC_RGHT} + // Space is repeated to accommadate for both spacebar wiring positions +}, +[1] = { /* 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}, + {KC_FN3, KC_LCTL, KC_LALT, KC_LGUI, FUNC(2), KC_SPC, KC_SPC, FUNC(1), KC_LEFT, KC_DOWN, KC_UP, KC_RGHT} +}, +[2] = { /* 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_TRNS, FUNC(3), FUNC(4), RESET, M(0), M(1), M(2), KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS}, + {KC_TRNS, KC_F11, KC_F12, M(0), M(1), M(2), M(3), M(4), M(5), M(6), M(7), KC_TRNS}, + {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, FUNC(1), KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY} +}, +[3] = { /* LOWER */ + {S(KC_GRV), S(KC_1), S(KC_2), S(KC_3), S(KC_4), S(KC_5), S(KC_6), S(KC_7), S(KC_8), S(KC_9), S(KC_0), KC_BSPC}, + {KC_TRNS, FUNC(3), FUNC(4), RESET, M(0), M(1), M(2), S(KC_MINS), S(KC_EQL), S(KC_LBRC), S(KC_RBRC), S(KC_BSLS)}, + {KC_TRNS, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_TRNS}, + {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, FUNC(2), KC_TRNS, KC_TRNS, KC_TRNS, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY} +} +}; + +const uint16_t PROGMEM fn_actions[] = { + [1] = ACTION_LAYER_MOMENTARY(2), // to RAISE + [2] = ACTION_LAYER_MOMENTARY(3), // to LOWER + + [3] = ACTION_DEFAULT_LAYER_SET(0), + [4] = ACTION_DEFAULT_LAYER_SET(1), + +}; + +const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) +{ + // MACRODOWN only works in this function + if (record->event.pressed) { + switch(id) { + case 0: + true_note(12, 12, 20); + break; + case 1: + true_note(14, 14, 20); + break; + case 2: + true_note(16, 16, 20); + break; + case 3: + true_note(17, 17, 20); + break; + case 4: + true_note(19, 19, 20); + break; + case 5: + true_note(21, 21, 20); + break; + case 6: + true_note(23, 23, 20); + break; + case 7: + true_note(24, 24, 20); + break; + case 10: + + break; + } + } + return MACRO_NONE; +}; diff --git a/keyboard/planck/keymaps/default.c b/keyboard/planck/keymaps/default.c new file mode 100644 index 0000000000..49670dafd3 --- /dev/null +++ b/keyboard/planck/keymaps/default.c @@ -0,0 +1,68 @@ +// 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 "backlight.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 _QW 0 +#define _CM 1 +#define _DV 2 +#define _LW 3 +#define _RS 4 + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { +[_QW] = { /* 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 }, + {M(0), KC_LCTL, KC_LALT, KC_LGUI, MO(_LW), KC_SPC, KC_SPC, MO(_RS), KC_LEFT, KC_DOWN, KC_UP, KC_RGHT} +}, +[_CM] = { /* 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 }, + {M(0), KC_LCTL, KC_LALT, KC_LGUI, MO(_LW), KC_SPC, KC_SPC, MO(_RS), KC_LEFT, KC_DOWN, KC_UP, KC_RGHT} +}, +[_DV] = { /* 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 }, + {M(0), KC_LCTL, KC_LALT, KC_LGUI, MO(_LW), KC_SPC, KC_SPC, MO(_RS), KC_LEFT, KC_DOWN, KC_UP, KC_RGHT} +}, +[_RS] = { /* 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_TRNS, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS}, + {KC_TRNS, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, DF(_QW), DF(_CM), DF(_DV), RESET, KC_TRNS}, + {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY} +}, +[_LW] = { /* 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_TRNS, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE}, + {KC_TRNS, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, DF(_QW), DF(_CM), DF(_DV), RESET, KC_TRNS}, + {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY} +} +}; + +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); + backlight_step(); + } else { + unregister_code(KC_RSFT); + } + break; + } + return MACRO_NONE; +}; diff --git a/keyboard/planck/keymaps/dzobert.c b/keyboard/planck/keymaps/dzobert.c new file mode 100644 index 0000000000..665e9c20b6 --- /dev/null +++ b/keyboard/planck/keymaps/dzobert.c @@ -0,0 +1,49 @@ +#include "keymap_common.h" + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { +[0] = { /* Qwerty */ + {KC_ESC, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_TAB}, + {KC_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_BSPC}, + {KC_LALT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT}, + {KC_FN4, KC_RSFT, KC_LGUI, KC_LSFT, FUNC(2), KC_SPC, KC_SPC, FUNC(1), KC_LEFT, KC_DOWN, KC_UP, KC_RGHT} + // Space is repeated to accommadate for both spacebar wiring positions +}, +[1] = { /* Colemak */ + {KC_TAB, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_TAB}, + {KC_ESC, KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O, KC_BSPC}, + {KC_LALT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT}, + {KC_FN3, KC_RSFT, KC_LGUI, KC_LSFT, FUNC(2), KC_SPC, KC_SPC, FUNC(1), KC_LEFT, KC_DOWN, KC_UP, KC_RGHT} +}, +[2] = { /* RAISE */ + {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_TRNS, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_DEL}, + {KC_TRNS, KC_GRV, KC_MINS, KC_EQL, KC_QUOT, S(KC_QUOT), S(KC_LBRC), S(KC_RBRC), KC_LBRC, KC_RBRC, KC_BSLS, KC_TRNS}, + {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, FUNC(1), KC_HOME, KC_PGUP, KC_PGDN, KC_END} +}, +[3] = { /* LOWER */ + {KC_POWER,KC_PSCR, KC_SLCK, KC_PAUSE, KC_NLCK, KC_EXECUTE, KC_MENU, KC_APP, KC_7, KC_8, KC_9, KC_KP_SLASH}, + {KC_TRNS, KC_VOLD, KC_VOLU, KC_MUTE, KC_CAPS, KC_CANCEL, KC_UNDO, KC_AGAIN, KC_4, KC_5, KC_6, KC_KP_ASTERISK}, + {KC_TRNS, KC_INSERT,KC_CUT, KC_COPY, KC_PASTE, KC_BSLS, KC_9, KC_0, KC_1, KC_2, KC_3, KC_KP_MINUS}, + {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, FUNC(2), KC_TRNS, KC_TRNS, KC_TRNS, KC_0, KC_KP_DOT, KC_KP_ENTER, KC_KP_PLUS} +} +}; + +const uint16_t PROGMEM fn_actions[] = { + [1] = ACTION_LAYER_MOMENTARY(2), // to RAISE + [2] = ACTION_LAYER_MOMENTARY(3), // to LOWER + + [3] = ACTION_DEFAULT_LAYER_SET(0), + [4] = ACTION_DEFAULT_LAYER_SET(1), + +}; + +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: + return MACRODOWN(T(CM_T), END); + break; + } + return MACRO_NONE; +}; \ No newline at end of file diff --git a/keyboard/planck/keymaps/gabriel.c b/keyboard/planck/keymaps/gabriel.c new file mode 100644 index 0000000000..805484488b --- /dev/null +++ b/keyboard/planck/keymaps/gabriel.c @@ -0,0 +1,108 @@ +#include "planck.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 _QW 0 +#define _LW 1 +#define _RS 2 +#define _FN 3 + +// This a slightly modified 'default' keymap that's closer to the Mac keyboard layout. I like the position +// of 'esc' and 'tab' better this way. I also got rid of the backlighting control key and the dvorak and +// colemak layers. I added an 'fn' layer that makes the 'bspc' a forward delete (like on OSX). +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { +/* MIT Layout (QWERTY layer) + * + * ,-----------------------------------------------------------------------. + * | esc | q | w | e | r | t | y | u | i | o | p | bspc| + * |-----------------------------------------------------------------------| + * | tab | a | s | d | f | g | h | j | k | l | ; | ' | + * |-----------------------------------------------------------------------| + * |shift| z | x | c | v | b | n | m | , | . | / |enter| + * |-----------------------------------------------------------------------| + * | fn | ctl | alt | cmd |lower| spc |raise|left |down | up |right| + * `-----------------------------------------------------------------------' + */ +[_QW] = { /* QWERTY */ + {KC_ESC, 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_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 }, + {MO(_FN), KC_LCTL, KC_LALT, KC_LGUI, MO(_LW), KC_SPC, KC_SPC, MO(_RS), KC_LEFT, KC_DOWN, KC_UP, KC_RGHT} +}, +/* MIT Layout (Raised layer) + * + * ,-----------------------------------------------------------------------. + * | ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | | + * |-----------------------------------------------------------------------| + * | | F1 | F2 | F3 | F4 | F5 | F6 | - | + | [ | ] | | | + * |-----------------------------------------------------------------------| + * | | F7 | F8 | F9 | F10 | F11 | F12 | | | | | | + * |-----------------------------------------------------------------------| + * | | | | | | | | | | | | + * `-----------------------------------------------------------------------' + */ +[_RS] = { /* 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_TRNS, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_MINS, KC_PLUS, KC_LBRC, KC_RBRC, KC_PIPE}, + {KC_TRNS, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, 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} +}, +/* MIT Layout (Lowered layer) + * + * ,-----------------------------------------------------------------------. + * | ~ | ! | @ | # | $ | % | ^ | & | * | ( | ) | | + * |-----------------------------------------------------------------------| + * | | F1 | F2 | F3 | F4 | F5 | F6 | _ | = | { | } | \ | + * |-----------------------------------------------------------------------| + * | | F7 | F8 | F9 | F10 | F11 | F12 | | | | | | + * |-----------------------------------------------------------------------| + * | | | | | | | | | | | | + * `-----------------------------------------------------------------------' + */ +[_LW] = { /* 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_TRNS, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_UNDS, KC_EQL, KC_LCBR, KC_RCBR, KC_BSLS}, + {KC_TRNS, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, 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} +}, +/* MIT Layout (FN layer) + * + * ,-----------------------------------------------------------------------. + * | | | | | | | | | | | | del | + * |-----------------------------------------------------------------------| + * | | | | | | | | | | | | | + * |-----------------------------------------------------------------------| + * | | | | | | | | | | | | | + * |-----------------------------------------------------------------------| + * | | | | | | | |home |pgdn |pgup | end | + * `-----------------------------------------------------------------------' + */ +[_FN] = { /* FUNCTION */ + {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_DELT}, + {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_HOME, KC_PGDN, KC_PGUP, KC_END} +} +}; + +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); + backlight_step(); + } else { + unregister_code(KC_RSFT); + } + break; + } + return MACRO_NONE; +}; diff --git a/keyboard/planck/keymaps/jack.c b/keyboard/planck/keymaps/jack.c new file mode 100644 index 0000000000..0b93bba33f --- /dev/null +++ b/keyboard/planck/keymaps/jack.c @@ -0,0 +1,50 @@ +#include "keymap_common.h" + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { +[0] = { /* Jack soft-coded colemak */ + {KC_TAB, CM_Q, CM_W, CM_F, CM_P, CM_G, CM_J, CM_L, CM_U, CM_Y, CM_SCLN, KC_BSPC}, + {KC_ESC, CM_A, CM_R, CM_S, CM_T, CM_D, CM_H, CM_N, CM_E, CM_I, CM_O, KC_QUOT}, + {KC_LSFT, CM_Z, CM_X, CM_C, CM_V, CM_B, CM_K, CM_M, CM_COMM, CM_DOT, CM_SLSH, KC_ENT}, + {BL_STEP, KC_LCTL, KC_LALT, KC_LGUI, FUNC(2), KC_SPC, KC_SPC, FUNC(1), KC_LEFT, KC_DOWN, KC_UP, KC_RGHT} + // Space is repeated to accommadate for both spacebar wiring positions +}, +[1] = { /* Jack hard-coded 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}, + {KC_FN3, KC_LCTL, KC_LALT, KC_LGUI, FUNC(2), KC_SPC, KC_SPC, FUNC(1), KC_LEFT, KC_DOWN, KC_UP, KC_RGHT} +}, +[2] = { /* Jack 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_TRNS, FUNC(3), FUNC(4), LSFT(RSFT(KC_PAUSE)), KC_TRNS, KC_TRNS, KC_TRNS, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS}, + {KC_TRNS, KC_F11, KC_F12, KC_F13, KC_F14, KC_F15, KC_F16, KC_F17, KC_F18, KC_F19, KC_F20, KC_TRNS}, + {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, FUNC(1), KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY} +}, +[3] = { /* Jack LOWER */ + {S(KC_GRV), S(KC_1), S(KC_2), S(KC_3), S(KC_4), S(KC_5), S(KC_6), S(KC_7), S(KC_8), S(KC_9), S(KC_0), KC_BSPC}, + {KC_TRNS, FUNC(3), FUNC(4), LSFT(RSFT(KC_PAUSE)), KC_TRNS, KC_TRNS, KC_TRNS, S(KC_MINS), S(KC_EQL), S(KC_LBRC), S(KC_RBRC), S(KC_BSLS)}, + {KC_TRNS, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_TRNS}, + {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, FUNC(2), KC_TRNS, KC_TRNS, KC_TRNS, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY} +} +}; + + +const uint16_t PROGMEM fn_actions[] = { + [1] = ACTION_LAYER_MOMENTARY(2), // to Fn overlay + [2] = ACTION_LAYER_MOMENTARY(3), // to Fn overlay + + [3] = ACTION_DEFAULT_LAYER_SET(0), + [4] = ACTION_DEFAULT_LAYER_SET(1), + +}; + +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: + return MACRODOWN(T(CM_T), END); + break; + } + return MACRO_NONE; +}; diff --git a/keyboard/planck/keymaps/joe.c b/keyboard/planck/keymaps/joe.c new file mode 100644 index 0000000000..5b7bbe2bbb --- /dev/null +++ b/keyboard/planck/keymaps/joe.c @@ -0,0 +1,88 @@ +#include "keymap_common.h" + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + [0] = { /* Joe colemak */ + {F(3), KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_MINS}, + {KC_BSPC, KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O, KC_ENT }, + {F(15), KC_Z, KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMM, KC_DOT, KC_UP, KC_QUOT}, + {KC_LCTL, KC_LGUI, KC_LALT, KC_LSFT, F(1), KC_SPC, KC_SPC, F(2), KC_SLSH, KC_LEFT, KC_DOWN, KC_RGHT} + }, + [1] = { /* Joe soft Colemak */ + {F(3), CM_Q, CM_W, CM_F, CM_P, CM_G, CM_J, CM_L, CM_U, CM_Y, CM_SCLN, KC_MINS}, + {KC_BSPC, CM_A, CM_R, CM_S, CM_T, CM_D, CM_H, CM_N, CM_E, CM_I, CM_O, KC_ENT }, + {F(15), CM_Z, CM_X, CM_C, CM_V, CM_B, CM_K, CM_M, KC_COMM, KC_DOT, KC_UP, KC_QUOT}, + {KC_LCTL, KC_LGUI, KC_LALT, KC_LSFT, F(1), KC_SPC, KC_SPC, F(2), KC_SLSH, KC_LEFT, KC_DOWN, KC_RGHT} + }, + [2] = { /* Joe NUMPAD */ + {F(3), KC_NO, KC_UP, KC_NO, KC_NO, KC_NO, LSFT(KC_9), LSFT(KC_0), KC_PSLS, KC_P7, KC_P8, KC_P9 }, + {KC_BSPC, KC_LEFT, KC_DOWN, KC_RGHT, KC_NO, KC_NO, LSFT(KC_5), KC_PEQL, KC_PAST, KC_P4, KC_P5, KC_P6 }, + {F(15), KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_PCMM, KC_PMNS, KC_P1, KC_P2, KC_P3 }, + {KC_LCTL, KC_LGUI, KC_LALT, KC_LSFT, F(1), KC_TRNS, KC_TRNS, F(2), KC_PPLS, KC_P0, KC_PDOT, KC_PENT} + }, + [3] = { /* Joe 1337 haxOr5*/ + {F(3), KC_Q, KC_W, KC_F, KC_P, KC_6, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_MINS}, + {KC_BSPC, KC_4, KC_R, KC_5, KC_7, KC_D, KC_H, KC_N, KC_3, KC_1, KC_0, KC_ENT }, + {F(15), KC_Z, KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMM, KC_DOT, KC_UP, KC_QUOT}, + {KC_LCTL, KC_LGUI, KC_LALT, KC_LSFT, F(1), KC_SPC, KC_SPC, F(2), KC_SLSH, KC_LEFT, KC_DOWN, KC_RGHT} + }, + [4] = { /* Joe LOWER fn1 */ + {KC_GRV, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, M(3), M(2), M(1), M(0) }, + {KC_BSPC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_TRNS}, + {KC_BSLS, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_LBRC, KC_RBRC, KC_PGUP, KC_EQL }, + {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, F(1), KC_TRNS, KC_TRNS, F(2), KC_NO, KC_HOME, KC_PGDN, KC_END } + }, + [5] = { /* Joe UPPER fn2 */ + {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_BTN1, KC_MS_U, KC_BTN2, KC_BTN3, KC_WH_U, KC_BTN4, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, KC_NO }, + {KC_TRNS, KC_MS_L, KC_MS_D, KC_MS_R, KC_WH_L, KC_WH_D, KC_WH_R, KC_NO, KC_NO, LCTL(KC_PGUP), LCTL(LALT(KC_UP)), LCTL(KC_PGDN) }, + {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, F(1), KC_NO, KC_NO, F(2), KC_NO, LCTL(LALT(KC_LEFT)), LCTL(LALT(KC_DOWN)), LCTL(LALT(KC_RGHT))} + }, + [6] = { /* Joe SPECIAL fn3 */ + {KC_TRNS, KC_MUTE, KC_VOLD, KC_VOLU, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO }, + {KC_NO, KC_MPLY, KC_MPRV, KC_MNXT, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, RESET }, + {KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO }, + {F(6), F(7), F(8), F(9), F(1), KC_TRNS, KC_TRNS, F(2), KC_POWER, KC_WAKE, KC_SLEP, LCTL(LALT(KC_L))} + } +}; + +const uint16_t PROGMEM fn_actions[] = { + [1] = ACTION_LAYER_MOMENTARY(4), // fn1 + [2] = ACTION_LAYER_MOMENTARY(5), // fn2 + + /* ESC on tap, fn3 on hold */ + [3] = ACTION_LAYER_TAP_KEY(6, KC_ESC), + + /* toggle layers */ + [6] = ACTION_DEFAULT_LAYER_SET(0), + [7] = ACTION_DEFAULT_LAYER_SET(1), + [8] = ACTION_DEFAULT_LAYER_SET(2), + [9] = ACTION_DEFAULT_LAYER_SET(3), + + /* tab on tap, shift on hold */ + [15] = ACTION_MODS_TAP_KEY(MOD_LSFT, KC_TAB), +}; + +const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) +{ + switch (id) { + case 0: + /* :) */ + return MACRODOWN( DOWN(KC_LSFT), TYPE(KC_SCLN), TYPE(KC_0), UP(KC_LSFT), END ); + break; + case 1: + /* :( */ + return MACRODOWN( DOWN(KC_LSFT), TYPE(KC_SCLN), TYPE(KC_9), UP(KC_LSFT), END ); + break; + case 2: + /* (: | :) */ + return MACRODOWN( DOWN(KC_LSFT), TYPE(KC_9), TYPE(KC_SCLN), TYPE(KC_SPC), TYPE(KC_SPC), TYPE(KC_SCLN), TYPE(KC_0), UP(KC_LSFT), TYPE(KC_LEFT), TYPE(KC_LEFT), TYPE(KC_LEFT), END ); + break; + case 3: + /* :( | ): */ + return MACRODOWN( DOWN(KC_LSFT), TYPE(KC_SCLN), TYPE(KC_9), TYPE(KC_SPC), TYPE(KC_SPC), TYPE(KC_0), TYPE(KC_SCLN), UP(KC_LSFT), TYPE(KC_LEFT), TYPE(KC_LEFT), TYPE(KC_LEFT), END ); + break; + default: + break; + } + return MACRO_NONE; +} diff --git a/keyboard/planck/keymaps/keymap_alexey.c b/keyboard/planck/keymaps/keymap_alexey.c deleted file mode 100644 index 89af4112c6..0000000000 --- a/keyboard/planck/keymaps/keymap_alexey.c +++ /dev/null @@ -1,51 +0,0 @@ -#include "keymap_common.h" -#include "planck.h" -#include "backlight.h" - -#define _QW 0 -#define _LW 1 -#define _RS 2 - -// This layout tries to imitate the Atreus keyboard - -const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { -[_QW] = { /* 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, MO(_LW)}, - {KC_TRNS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_TRNS}, - {M(0), KC_LGUI, KC_LALT, KC_LCTL, KC_LSFT, KC_SPC, KC_SPC, MO(_RS), KC_MINS, KC_QUOT, KC_ENT, KC_TRNS} -}, -[_RS] = { /* RAISE */ - {KC_TRNS, KC_EXLM, KC_AT, KC_LCBR, KC_RCBR, KC_PIPE, KC_PGUP, KC_7, KC_8, KC_9, KC_ASTR, KC_TRNS}, - {KC_TRNS, KC_HASH, KC_DLR, KC_LPRN, KC_RPRN, KC_GRV, KC_PGDN, KC_4, KC_5, KC_6, KC_PLUS, KC_TRNS}, - {KC_TRNS, KC_PERC, KC_CIRC, KC_LBRC, KC_RBRC, KC_TILD, KC_AMPR, KC_1, KC_2, KC_3, KC_BSLS, KC_TRNS}, - {KC_TRNS, KC_TRNS, KC_INS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_0, KC_EQL, KC_TRNS} -}, -[_LW] = { /* LOWER */ - {KC_TRNS, KC_INS, KC_HOME, KC_UP, KC_END, KC_PGUP, KC_TRNS, KC_F7, KC_F8, KC_F9, KC_F10, KC_TRNS}, - {KC_TRNS, KC_DELETE, KC_LEFT, KC_DOWN, KC_RGHT, KC_PGDN, KC_TRNS, KC_F4, KC_F5, KC_F6, KC_F11, KC_TRNS}, - {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_F1, KC_F2, KC_F3, KC_F12, KC_TRNS}, - {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_VOLD, KC_VOLU, KC_MNXT, KC_MPLY, KC_TRNS} -} -}; - -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); - backlight_step(); - } else { - unregister_code(KC_RSFT); - } - break; - } - return MACRO_NONE; -}; - diff --git a/keyboard/planck/keymaps/keymap_angerthosenear.c b/keyboard/planck/keymaps/keymap_angerthosenear.c deleted file mode 100644 index cdf60632e4..0000000000 --- a/keyboard/planck/keymaps/keymap_angerthosenear.c +++ /dev/null @@ -1,50 +0,0 @@ -#include "keymap_common.h" - -const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { -[0] = { /* Qwerty */ - {KC_ESC, 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_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, 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_QUOT}, - {KC_LCTL, KC_LGUI, KC_LALT, BL_STEP, FUNC(2), KC_SPC, KC_SPC, FUNC(1), KC_LEFT, KC_DOWN, KC_UP, KC_RGHT} - // Space is repeated to accommadate for both spacebar wiring positions -}, -[1] = { /* WASD + NumPad */ - {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_P7, KC_P8, KC_P9, KC_PSLS, KC_PMNS, KC_TRNS}, - {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_P4, KC_P5, KC_P6, KC_PAST, KC_PPLS, KC_TRNS}, - {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_P1, KC_P2, KC_P3, KC_PDOT, KC_PENT, KC_TRNS}, - {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, FUNC(2), KC_SPC, KC_P0, FUNC(1), KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS} -}, -[2] = { /* RAISE */ - {KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_TRNS}, - {KC_TRNS, FUNC(3), FUNC(4), LSFT(RSFT(KC_PAUSE)), KC_TRNS, KC_TRNS, KC_TRNS, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS}, - {KC_TRNS, KC_F11, KC_F12, KC_F13, KC_F14, KC_F15, KC_F16, KC_F17, KC_F18, KC_F19, KC_F20, KC_TRNS}, - {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MPRV, FUNC(1), KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY} -}, -[3] = { /* LOWER */ - {S(KC_GRV), S(KC_1), S(KC_2), S(KC_3), S(KC_4), S(KC_5), S(KC_6), S(KC_7), S(KC_8), S(KC_9), S(KC_0), KC_DEL}, - {KC_TRNS, FUNC(3), FUNC(4), LSFT(RSFT(KC_PAUSE)), KC_TRNS, KC_TRNS, KC_TRNS, S(KC_MINS), S(KC_EQL), S(KC_LBRC), S(KC_RBRC), S(KC_BSLS)}, - {KC_TRNS, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_TRNS}, - {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, FUNC(2), KC_TRNS, KC_TRNS, KC_TRNS, KC_HOME, KC_PGDN, KC_PGUP, KC_END} -} -}; - - -const uint16_t PROGMEM fn_actions[] = { - [1] = ACTION_LAYER_MOMENTARY(2), // to RAISE - [2] = ACTION_LAYER_MOMENTARY(3), // to LOWER - - [3] = ACTION_DEFAULT_LAYER_SET(0), - [4] = ACTION_DEFAULT_LAYER_SET(1), - -}; - -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: - return MACRODOWN(T(CM_T), END); - break; - } - return MACRO_NONE; -}; diff --git a/keyboard/planck/keymaps/keymap_austin.c b/keyboard/planck/keymaps/keymap_austin.c deleted file mode 100644 index 49fc98a587..0000000000 --- a/keyboard/planck/keymaps/keymap_austin.c +++ /dev/null @@ -1,50 +0,0 @@ -#include "keymap_common.h" - -const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { -[0] = { /* 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}, - {BL_STEP, KC_LGUI, KC_LALT, KC_LCTL, FUNC(2), KC_SPC, KC_SPC, FUNC(1), KC_LEFT, KC_DOWN, KC_UP, KC_RGHT} - // Space is repeated to accommadate for both spacebar wiring positions -}, -[1] = { /* 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}, - {KC_FN3, KC_LGUI, KC_LALT, KC_LCTL, FUNC(2), KC_SPC, KC_SPC, FUNC(1), KC_LEFT, KC_DOWN, KC_UP, KC_RGHT} -}, -[2] = { /* 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_TRNS, FUNC(3), FUNC(4), LSFT(RSFT(KC_PAUSE)), KC_TRNS, KC_TRNS, KC_TRNS, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS}, - {KC_TRNS, KC_F11, KC_F12, KC_F13, KC_F14, KC_F15, KC_F16, KC_F17, KC_F18, KC_F19, KC_F20, KC_TRNS}, - {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, FUNC(1), KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY} -}, -[3] = { /* LOWER */ - {S(KC_GRV), S(KC_1), S(KC_2), S(KC_3), S(KC_4), S(KC_5), S(KC_6), S(KC_7), S(KC_8), S(KC_9), S(KC_0), KC_BSPC}, - {KC_TRNS, FUNC(3), FUNC(4), LSFT(RSFT(KC_PAUSE)), KC_TRNS, KC_TRNS, KC_TRNS, S(KC_MINS), S(KC_EQL), S(KC_LBRC), S(KC_RBRC), S(KC_BSLS)}, - {KC_TRNS, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_TRNS}, - {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, FUNC(2), KC_TRNS, KC_TRNS, KC_TRNS, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY} -} -}; - - -const uint16_t PROGMEM fn_actions[] = { - [1] = ACTION_LAYER_MOMENTARY(2), // to RAISE - [2] = ACTION_LAYER_MOMENTARY(3), // to LOWER - - [3] = ACTION_DEFAULT_LAYER_SET(0), - [4] = ACTION_DEFAULT_LAYER_SET(1), - -}; - -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: - return MACRODOWN(T(CM_T), END); - break; - } - return MACRO_NONE; -}; diff --git a/keyboard/planck/keymaps/keymap_charlie.c b/keyboard/planck/keymaps/keymap_charlie.c deleted file mode 100644 index 88f454d789..0000000000 --- a/keyboard/planck/keymaps/keymap_charlie.c +++ /dev/null @@ -1,54 +0,0 @@ -#include "keymap_common.h" - -const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { - [0] = { /* Native */ - {KC_ESC, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, FUNC(2)}, - {KC_BSPC, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT}, - {KC_TAB, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT}, - {KC_DEL, KC_LCTL, KC_NO, KC_LSFT, KC_LALT, KC_SPC, KC_NO, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT} -}, - [1] = { /* QWERTY->PHOTOSHOP */ - {KC_DELETE, KC_0, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, FUNC(1)}, - {KC_O, KC_G, KC_S, KC_U, KC_T, FUNC(27), KC_F21, KC_F10, KC_F11, KC_F7, KC_F8, KC_F9}, - {KC_TAB, FUNC(4), FUNC(5), FUNC(6), KC_F1, FUNC(7), KC_F18, KC_F19, KC_F23, KC_F20, KC_F22, FUNC(9)}, - {KC_COMM, KC_DOT, KC_R, FUNC(11), FUNC(3), KC_SPC, FUNC(12), KC_F2, FUNC(8), KC_F3, KC_F14} - }, - [2] = { /* 2: FUNC(3 PHOTOSHOP */ - {KC_ESC, FUNC(25), FUNC(26), KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO}, - {KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, FUNC(19), FUNC(20), FUNC(21)}, - {KC_C, KC_NO, FUNC(22), FUNC(5), KC_NO, FUNC(23), KC_NO, KC_NO, KC_NO, KC_NO, FUNC(13), KC_NO}, - {FUNC(14), FUNC(15), FUNC(16), FUNC(17), FUNC(3), KC_SPC, FUNC(18), KC_NO, KC_NO, KC_F24, KC_NO} - } -}; - -const uint16_t PROGMEM fn_actions[] = { - [1] = ACTION_DEFAULT_LAYER_SET(0), // set Qwerty layout - [2] = ACTION_DEFAULT_LAYER_SET(1), // set Photoshop presets - [3] = ACTION_LAYER_MOMENTARY(2), // Photoshop function layer - - [4] = ACTION_MODS_KEY(MOD_LSFT | MOD_LCTL | MOD_LALT, KC_F9), // photo folder AHK - [5] = ACTION_MODS_KEY(MOD_LSFT | MOD_LCTL, KC_I), // select inverse - [6] = ACTION_MODS_KEY(MOD_LSFT, KC_M), // marquee select - [7] = ACTION_MODS_KEY(MOD_LALT, KC_BSPC), // fill - [8] = ACTION_MODS_KEY(MOD_LSFT | MOD_LCTL | MOD_LALT, KC_X), // warp - [9] = ACTION_MODS_KEY(MOD_LCTL | MOD_LALT | MOD_LSFT, KC_F12), // merge all new layer - [10] = ACTION_MODS_KEY(MOD_LCTL, KC_MINS), // zoom out - [11] = ACTION_MODS_KEY(MOD_LCTL, KC_H), // RBG sliders - [12] = ACTION_MODS_KEY(MOD_LCTL, KC_S), // save - [13] = ACTION_MODS_KEY(MOD_LSFT | MOD_LCTL, KC_F5), // layer mask from transparancy - [14] = ACTION_MODS_KEY(MOD_LCTL, KC_F2), // stroke - [15] = ACTION_MODS_KEY(MOD_LCTL | MOD_LSFT, KC_F2), // stroke layer - [16] = ACTION_MODS_KEY(MOD_LCTL, KC_0), // zoom 0 - [17] = ACTION_MODS_KEY(MOD_LSFT | MOD_LCTL, KC_H), // HSV sliders - [18] = ACTION_MODS_KEY(MOD_LCTL | MOD_LSFT, KC_S), // save as - [19] = ACTION_MODS_KEY(MOD_LSFT | MOD_LCTL | MOD_LALT, KC_F7), // gaussian blur - [20] = ACTION_MODS_KEY(MOD_LSFT | MOD_LCTL | MOD_LALT, KC_F8), // motion blur - [21] = ACTION_MODS_KEY(MOD_LSFT | MOD_LCTL, KC_X), // liquify filter - [22] = ACTION_MODS_KEY(MOD_LSFT, KC_MINS), // prev layer blending - [23] = ACTION_MODS_KEY(MOD_LSFT | MOD_LCTL, KC_BSPC), // KC_NOrmal layer blending - [24] = ACTION_MODS_KEY(MOD_LSFT, KC_EQL), // next layer blending - [25] = ACTION_MODS_KEY(MOD_LCTL, KC_Z), // step back - [26] = ACTION_MODS_KEY(MOD_LCTL, KC_Y), // step forward - [27] = ACTION_MODS_KEY(MOD_LCTL, KC_R), // rasterize - -}; diff --git a/keyboard/planck/keymaps/keymap_daniel.c b/keyboard/planck/keymaps/keymap_daniel.c deleted file mode 100644 index 234e48ff4a..0000000000 --- a/keyboard/planck/keymaps/keymap_daniel.c +++ /dev/null @@ -1,48 +0,0 @@ -#include "keymap_common.h" - -const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { -[0] = { /* Qwerty */ - {KC_ESC, 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_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_RSFT}, - {FUNC(3), KC_LCTL, KC_LALT, KC_LGUI, FUNC(2), KC_SPC, KC_SPC, FUNC(1), KC_LEFT, KC_DOWN, KC_UP, KC_RGHT} - // Space is repeated to accommadate for both spacebar wiring positions -}, -[1] = { /* RAISE */ - {KC_GRV, S(KC_1), S(KC_2), S(KC_3), S(KC_4), S(KC_5), S(KC_6), S(KC_7), S(KC_8), S(KC_9), S(KC_0), KC_EQL}, - {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_LBRC, KC_RBRC}, - {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MINS, S(KC_MINS), KC_BSLS, KC_TRNS}, - {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, FUNC(1), KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY} -}, -[2] = { /* LOWER */ - {S(KC_GRV), KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, S(KC_EQL)}, - {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_CAPS, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_ENT}, - {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, FUNC(2), KC_TRNS, KC_TRNS, KC_TRNS, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY} -}, -[3] = { /* Qwerty */ - {KC_ESC, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_DEL}, - {KC_TAB, 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_RSFT}, - {KC_TRNS, KC_LCTL, KC_LALT, KC_LGUI, FUNC(2), KC_SPC, KC_SPC, FUNC(1), KC_LEFT, KC_DOWN, KC_UP, KC_RGHT} - // Space is repeated to accommadate for both spacebar wiring positions -} -}; - - -const uint16_t PROGMEM fn_actions[] = { - [1] = ACTION_LAYER_MOMENTARY(1), // to RAISE - [2] = ACTION_LAYER_MOMENTARY(2), // to LOWER - [3] = ACTION_LAYER_MOMENTARY(3) // to LOWER -}; - -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: - return MACRODOWN(T(CM_T), END); - break; - } - return MACRO_NONE; -}; diff --git a/keyboard/planck/keymaps/keymap_david.c b/keyboard/planck/keymaps/keymap_david.c deleted file mode 100644 index f483084801..0000000000 --- a/keyboard/planck/keymaps/keymap_david.c +++ /dev/null @@ -1,76 +0,0 @@ -#include "keymap_common.h" -#include "beeps.h" - -const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { -[0] = { /* Qwerty */ - {KC_Q, KC_W, KC_E, KC_R, KC_T, KC_BSPC, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC}, - {KC_A, KC_S, KC_D, KC_F, KC_G, KC_ENT, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT}, - {KC_Z, KC_X, KC_C, KC_V, KC_B, KC_ESC, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT}, - {M(10), KC_LCTL, KC_LALT, KC_LGUI, FUNC(2), KC_SPC, KC_SPC, FUNC(1), KC_LEFT, KC_DOWN, KC_UP, KC_RGHT} - // Space is repeated to accommadate for both spacebar wiring positions -}, -[1] = { /* 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}, - {KC_FN3, KC_LCTL, KC_LALT, KC_LGUI, FUNC(2), KC_SPC, KC_SPC, FUNC(1), KC_LEFT, KC_DOWN, KC_UP, KC_RGHT} -}, -[2] = { /* 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_TRNS, FUNC(3), FUNC(4), RESET, M(0), M(1), M(2), KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS}, - {KC_TRNS, KC_F11, KC_F12, M(0), M(1), M(2), M(3), M(4), M(5), M(6), M(7), KC_TRNS}, - {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, FUNC(1), KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY} -}, -[3] = { /* LOWER */ - {S(KC_GRV), S(KC_1), S(KC_2), S(KC_3), S(KC_4), S(KC_5), S(KC_6), S(KC_7), S(KC_8), S(KC_9), S(KC_0), KC_BSPC}, - {KC_TRNS, FUNC(3), FUNC(4), RESET, M(0), M(1), M(2), S(KC_MINS), S(KC_EQL), S(KC_LBRC), S(KC_RBRC), S(KC_BSLS)}, - {KC_TRNS, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_TRNS}, - {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, FUNC(2), KC_TRNS, KC_TRNS, KC_TRNS, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY} -} -}; - -const uint16_t PROGMEM fn_actions[] = { - [1] = ACTION_LAYER_MOMENTARY(2), // to RAISE - [2] = ACTION_LAYER_MOMENTARY(3), // to LOWER - - [3] = ACTION_DEFAULT_LAYER_SET(0), - [4] = ACTION_DEFAULT_LAYER_SET(1), - -}; - -const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) -{ - // MACRODOWN only works in this function - if (record->event.pressed) { - switch(id) { - case 0: - true_note(12, 12, 20); - break; - case 1: - true_note(14, 14, 20); - break; - case 2: - true_note(16, 16, 20); - break; - case 3: - true_note(17, 17, 20); - break; - case 4: - true_note(19, 19, 20); - break; - case 5: - true_note(21, 21, 20); - break; - case 6: - true_note(23, 23, 20); - break; - case 7: - true_note(24, 24, 20); - break; - case 10: - - break; - } - } - return MACRO_NONE; -}; diff --git a/keyboard/planck/keymaps/keymap_default.c b/keyboard/planck/keymaps/keymap_default.c deleted file mode 100644 index 49670dafd3..0000000000 --- a/keyboard/planck/keymaps/keymap_default.c +++ /dev/null @@ -1,68 +0,0 @@ -// 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 "backlight.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 _QW 0 -#define _CM 1 -#define _DV 2 -#define _LW 3 -#define _RS 4 - -const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { -[_QW] = { /* 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 }, - {M(0), KC_LCTL, KC_LALT, KC_LGUI, MO(_LW), KC_SPC, KC_SPC, MO(_RS), KC_LEFT, KC_DOWN, KC_UP, KC_RGHT} -}, -[_CM] = { /* 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 }, - {M(0), KC_LCTL, KC_LALT, KC_LGUI, MO(_LW), KC_SPC, KC_SPC, MO(_RS), KC_LEFT, KC_DOWN, KC_UP, KC_RGHT} -}, -[_DV] = { /* 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 }, - {M(0), KC_LCTL, KC_LALT, KC_LGUI, MO(_LW), KC_SPC, KC_SPC, MO(_RS), KC_LEFT, KC_DOWN, KC_UP, KC_RGHT} -}, -[_RS] = { /* 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_TRNS, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS}, - {KC_TRNS, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, DF(_QW), DF(_CM), DF(_DV), RESET, KC_TRNS}, - {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY} -}, -[_LW] = { /* 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_TRNS, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE}, - {KC_TRNS, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, DF(_QW), DF(_CM), DF(_DV), RESET, KC_TRNS}, - {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY} -} -}; - -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); - backlight_step(); - } else { - unregister_code(KC_RSFT); - } - break; - } - return MACRO_NONE; -}; diff --git a/keyboard/planck/keymaps/keymap_dzobert.c b/keyboard/planck/keymaps/keymap_dzobert.c deleted file mode 100644 index 665e9c20b6..0000000000 --- a/keyboard/planck/keymaps/keymap_dzobert.c +++ /dev/null @@ -1,49 +0,0 @@ -#include "keymap_common.h" - -const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { -[0] = { /* Qwerty */ - {KC_ESC, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_TAB}, - {KC_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_BSPC}, - {KC_LALT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT}, - {KC_FN4, KC_RSFT, KC_LGUI, KC_LSFT, FUNC(2), KC_SPC, KC_SPC, FUNC(1), KC_LEFT, KC_DOWN, KC_UP, KC_RGHT} - // Space is repeated to accommadate for both spacebar wiring positions -}, -[1] = { /* Colemak */ - {KC_TAB, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_TAB}, - {KC_ESC, KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O, KC_BSPC}, - {KC_LALT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT}, - {KC_FN3, KC_RSFT, KC_LGUI, KC_LSFT, FUNC(2), KC_SPC, KC_SPC, FUNC(1), KC_LEFT, KC_DOWN, KC_UP, KC_RGHT} -}, -[2] = { /* RAISE */ - {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_TRNS, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_DEL}, - {KC_TRNS, KC_GRV, KC_MINS, KC_EQL, KC_QUOT, S(KC_QUOT), S(KC_LBRC), S(KC_RBRC), KC_LBRC, KC_RBRC, KC_BSLS, KC_TRNS}, - {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, FUNC(1), KC_HOME, KC_PGUP, KC_PGDN, KC_END} -}, -[3] = { /* LOWER */ - {KC_POWER,KC_PSCR, KC_SLCK, KC_PAUSE, KC_NLCK, KC_EXECUTE, KC_MENU, KC_APP, KC_7, KC_8, KC_9, KC_KP_SLASH}, - {KC_TRNS, KC_VOLD, KC_VOLU, KC_MUTE, KC_CAPS, KC_CANCEL, KC_UNDO, KC_AGAIN, KC_4, KC_5, KC_6, KC_KP_ASTERISK}, - {KC_TRNS, KC_INSERT,KC_CUT, KC_COPY, KC_PASTE, KC_BSLS, KC_9, KC_0, KC_1, KC_2, KC_3, KC_KP_MINUS}, - {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, FUNC(2), KC_TRNS, KC_TRNS, KC_TRNS, KC_0, KC_KP_DOT, KC_KP_ENTER, KC_KP_PLUS} -} -}; - -const uint16_t PROGMEM fn_actions[] = { - [1] = ACTION_LAYER_MOMENTARY(2), // to RAISE - [2] = ACTION_LAYER_MOMENTARY(3), // to LOWER - - [3] = ACTION_DEFAULT_LAYER_SET(0), - [4] = ACTION_DEFAULT_LAYER_SET(1), - -}; - -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: - return MACRODOWN(T(CM_T), END); - break; - } - return MACRO_NONE; -}; \ No newline at end of file diff --git a/keyboard/planck/keymaps/keymap_gabriel.c b/keyboard/planck/keymaps/keymap_gabriel.c deleted file mode 100644 index 805484488b..0000000000 --- a/keyboard/planck/keymaps/keymap_gabriel.c +++ /dev/null @@ -1,108 +0,0 @@ -#include "planck.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 _QW 0 -#define _LW 1 -#define _RS 2 -#define _FN 3 - -// This a slightly modified 'default' keymap that's closer to the Mac keyboard layout. I like the position -// of 'esc' and 'tab' better this way. I also got rid of the backlighting control key and the dvorak and -// colemak layers. I added an 'fn' layer that makes the 'bspc' a forward delete (like on OSX). -const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { -/* MIT Layout (QWERTY layer) - * - * ,-----------------------------------------------------------------------. - * | esc | q | w | e | r | t | y | u | i | o | p | bspc| - * |-----------------------------------------------------------------------| - * | tab | a | s | d | f | g | h | j | k | l | ; | ' | - * |-----------------------------------------------------------------------| - * |shift| z | x | c | v | b | n | m | , | . | / |enter| - * |-----------------------------------------------------------------------| - * | fn | ctl | alt | cmd |lower| spc |raise|left |down | up |right| - * `-----------------------------------------------------------------------' - */ -[_QW] = { /* QWERTY */ - {KC_ESC, 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_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 }, - {MO(_FN), KC_LCTL, KC_LALT, KC_LGUI, MO(_LW), KC_SPC, KC_SPC, MO(_RS), KC_LEFT, KC_DOWN, KC_UP, KC_RGHT} -}, -/* MIT Layout (Raised layer) - * - * ,-----------------------------------------------------------------------. - * | ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | | - * |-----------------------------------------------------------------------| - * | | F1 | F2 | F3 | F4 | F5 | F6 | - | + | [ | ] | | | - * |-----------------------------------------------------------------------| - * | | F7 | F8 | F9 | F10 | F11 | F12 | | | | | | - * |-----------------------------------------------------------------------| - * | | | | | | | | | | | | - * `-----------------------------------------------------------------------' - */ -[_RS] = { /* 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_TRNS, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_MINS, KC_PLUS, KC_LBRC, KC_RBRC, KC_PIPE}, - {KC_TRNS, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, 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} -}, -/* MIT Layout (Lowered layer) - * - * ,-----------------------------------------------------------------------. - * | ~ | ! | @ | # | $ | % | ^ | & | * | ( | ) | | - * |-----------------------------------------------------------------------| - * | | F1 | F2 | F3 | F4 | F5 | F6 | _ | = | { | } | \ | - * |-----------------------------------------------------------------------| - * | | F7 | F8 | F9 | F10 | F11 | F12 | | | | | | - * |-----------------------------------------------------------------------| - * | | | | | | | | | | | | - * `-----------------------------------------------------------------------' - */ -[_LW] = { /* 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_TRNS, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_UNDS, KC_EQL, KC_LCBR, KC_RCBR, KC_BSLS}, - {KC_TRNS, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, 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} -}, -/* MIT Layout (FN layer) - * - * ,-----------------------------------------------------------------------. - * | | | | | | | | | | | | del | - * |-----------------------------------------------------------------------| - * | | | | | | | | | | | | | - * |-----------------------------------------------------------------------| - * | | | | | | | | | | | | | - * |-----------------------------------------------------------------------| - * | | | | | | | |home |pgdn |pgup | end | - * `-----------------------------------------------------------------------' - */ -[_FN] = { /* FUNCTION */ - {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_DELT}, - {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_HOME, KC_PGDN, KC_PGUP, KC_END} -} -}; - -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); - backlight_step(); - } else { - unregister_code(KC_RSFT); - } - break; - } - return MACRO_NONE; -}; diff --git a/keyboard/planck/keymaps/keymap_jack.c b/keyboard/planck/keymaps/keymap_jack.c deleted file mode 100644 index 0b93bba33f..0000000000 --- a/keyboard/planck/keymaps/keymap_jack.c +++ /dev/null @@ -1,50 +0,0 @@ -#include "keymap_common.h" - -const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { -[0] = { /* Jack soft-coded colemak */ - {KC_TAB, CM_Q, CM_W, CM_F, CM_P, CM_G, CM_J, CM_L, CM_U, CM_Y, CM_SCLN, KC_BSPC}, - {KC_ESC, CM_A, CM_R, CM_S, CM_T, CM_D, CM_H, CM_N, CM_E, CM_I, CM_O, KC_QUOT}, - {KC_LSFT, CM_Z, CM_X, CM_C, CM_V, CM_B, CM_K, CM_M, CM_COMM, CM_DOT, CM_SLSH, KC_ENT}, - {BL_STEP, KC_LCTL, KC_LALT, KC_LGUI, FUNC(2), KC_SPC, KC_SPC, FUNC(1), KC_LEFT, KC_DOWN, KC_UP, KC_RGHT} - // Space is repeated to accommadate for both spacebar wiring positions -}, -[1] = { /* Jack hard-coded 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}, - {KC_FN3, KC_LCTL, KC_LALT, KC_LGUI, FUNC(2), KC_SPC, KC_SPC, FUNC(1), KC_LEFT, KC_DOWN, KC_UP, KC_RGHT} -}, -[2] = { /* Jack 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_TRNS, FUNC(3), FUNC(4), LSFT(RSFT(KC_PAUSE)), KC_TRNS, KC_TRNS, KC_TRNS, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS}, - {KC_TRNS, KC_F11, KC_F12, KC_F13, KC_F14, KC_F15, KC_F16, KC_F17, KC_F18, KC_F19, KC_F20, KC_TRNS}, - {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, FUNC(1), KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY} -}, -[3] = { /* Jack LOWER */ - {S(KC_GRV), S(KC_1), S(KC_2), S(KC_3), S(KC_4), S(KC_5), S(KC_6), S(KC_7), S(KC_8), S(KC_9), S(KC_0), KC_BSPC}, - {KC_TRNS, FUNC(3), FUNC(4), LSFT(RSFT(KC_PAUSE)), KC_TRNS, KC_TRNS, KC_TRNS, S(KC_MINS), S(KC_EQL), S(KC_LBRC), S(KC_RBRC), S(KC_BSLS)}, - {KC_TRNS, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_TRNS}, - {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, FUNC(2), KC_TRNS, KC_TRNS, KC_TRNS, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY} -} -}; - - -const uint16_t PROGMEM fn_actions[] = { - [1] = ACTION_LAYER_MOMENTARY(2), // to Fn overlay - [2] = ACTION_LAYER_MOMENTARY(3), // to Fn overlay - - [3] = ACTION_DEFAULT_LAYER_SET(0), - [4] = ACTION_DEFAULT_LAYER_SET(1), - -}; - -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: - return MACRODOWN(T(CM_T), END); - break; - } - return MACRO_NONE; -}; diff --git a/keyboard/planck/keymaps/keymap_joe.c b/keyboard/planck/keymaps/keymap_joe.c deleted file mode 100644 index 5b7bbe2bbb..0000000000 --- a/keyboard/planck/keymaps/keymap_joe.c +++ /dev/null @@ -1,88 +0,0 @@ -#include "keymap_common.h" - -const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { - [0] = { /* Joe colemak */ - {F(3), KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_MINS}, - {KC_BSPC, KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O, KC_ENT }, - {F(15), KC_Z, KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMM, KC_DOT, KC_UP, KC_QUOT}, - {KC_LCTL, KC_LGUI, KC_LALT, KC_LSFT, F(1), KC_SPC, KC_SPC, F(2), KC_SLSH, KC_LEFT, KC_DOWN, KC_RGHT} - }, - [1] = { /* Joe soft Colemak */ - {F(3), CM_Q, CM_W, CM_F, CM_P, CM_G, CM_J, CM_L, CM_U, CM_Y, CM_SCLN, KC_MINS}, - {KC_BSPC, CM_A, CM_R, CM_S, CM_T, CM_D, CM_H, CM_N, CM_E, CM_I, CM_O, KC_ENT }, - {F(15), CM_Z, CM_X, CM_C, CM_V, CM_B, CM_K, CM_M, KC_COMM, KC_DOT, KC_UP, KC_QUOT}, - {KC_LCTL, KC_LGUI, KC_LALT, KC_LSFT, F(1), KC_SPC, KC_SPC, F(2), KC_SLSH, KC_LEFT, KC_DOWN, KC_RGHT} - }, - [2] = { /* Joe NUMPAD */ - {F(3), KC_NO, KC_UP, KC_NO, KC_NO, KC_NO, LSFT(KC_9), LSFT(KC_0), KC_PSLS, KC_P7, KC_P8, KC_P9 }, - {KC_BSPC, KC_LEFT, KC_DOWN, KC_RGHT, KC_NO, KC_NO, LSFT(KC_5), KC_PEQL, KC_PAST, KC_P4, KC_P5, KC_P6 }, - {F(15), KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_PCMM, KC_PMNS, KC_P1, KC_P2, KC_P3 }, - {KC_LCTL, KC_LGUI, KC_LALT, KC_LSFT, F(1), KC_TRNS, KC_TRNS, F(2), KC_PPLS, KC_P0, KC_PDOT, KC_PENT} - }, - [3] = { /* Joe 1337 haxOr5*/ - {F(3), KC_Q, KC_W, KC_F, KC_P, KC_6, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_MINS}, - {KC_BSPC, KC_4, KC_R, KC_5, KC_7, KC_D, KC_H, KC_N, KC_3, KC_1, KC_0, KC_ENT }, - {F(15), KC_Z, KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMM, KC_DOT, KC_UP, KC_QUOT}, - {KC_LCTL, KC_LGUI, KC_LALT, KC_LSFT, F(1), KC_SPC, KC_SPC, F(2), KC_SLSH, KC_LEFT, KC_DOWN, KC_RGHT} - }, - [4] = { /* Joe LOWER fn1 */ - {KC_GRV, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, M(3), M(2), M(1), M(0) }, - {KC_BSPC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_TRNS}, - {KC_BSLS, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_LBRC, KC_RBRC, KC_PGUP, KC_EQL }, - {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, F(1), KC_TRNS, KC_TRNS, F(2), KC_NO, KC_HOME, KC_PGDN, KC_END } - }, - [5] = { /* Joe UPPER fn2 */ - {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_BTN1, KC_MS_U, KC_BTN2, KC_BTN3, KC_WH_U, KC_BTN4, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, KC_NO }, - {KC_TRNS, KC_MS_L, KC_MS_D, KC_MS_R, KC_WH_L, KC_WH_D, KC_WH_R, KC_NO, KC_NO, LCTL(KC_PGUP), LCTL(LALT(KC_UP)), LCTL(KC_PGDN) }, - {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, F(1), KC_NO, KC_NO, F(2), KC_NO, LCTL(LALT(KC_LEFT)), LCTL(LALT(KC_DOWN)), LCTL(LALT(KC_RGHT))} - }, - [6] = { /* Joe SPECIAL fn3 */ - {KC_TRNS, KC_MUTE, KC_VOLD, KC_VOLU, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO }, - {KC_NO, KC_MPLY, KC_MPRV, KC_MNXT, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, RESET }, - {KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO }, - {F(6), F(7), F(8), F(9), F(1), KC_TRNS, KC_TRNS, F(2), KC_POWER, KC_WAKE, KC_SLEP, LCTL(LALT(KC_L))} - } -}; - -const uint16_t PROGMEM fn_actions[] = { - [1] = ACTION_LAYER_MOMENTARY(4), // fn1 - [2] = ACTION_LAYER_MOMENTARY(5), // fn2 - - /* ESC on tap, fn3 on hold */ - [3] = ACTION_LAYER_TAP_KEY(6, KC_ESC), - - /* toggle layers */ - [6] = ACTION_DEFAULT_LAYER_SET(0), - [7] = ACTION_DEFAULT_LAYER_SET(1), - [8] = ACTION_DEFAULT_LAYER_SET(2), - [9] = ACTION_DEFAULT_LAYER_SET(3), - - /* tab on tap, shift on hold */ - [15] = ACTION_MODS_TAP_KEY(MOD_LSFT, KC_TAB), -}; - -const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) -{ - switch (id) { - case 0: - /* :) */ - return MACRODOWN( DOWN(KC_LSFT), TYPE(KC_SCLN), TYPE(KC_0), UP(KC_LSFT), END ); - break; - case 1: - /* :( */ - return MACRODOWN( DOWN(KC_LSFT), TYPE(KC_SCLN), TYPE(KC_9), UP(KC_LSFT), END ); - break; - case 2: - /* (: | :) */ - return MACRODOWN( DOWN(KC_LSFT), TYPE(KC_9), TYPE(KC_SCLN), TYPE(KC_SPC), TYPE(KC_SPC), TYPE(KC_SCLN), TYPE(KC_0), UP(KC_LSFT), TYPE(KC_LEFT), TYPE(KC_LEFT), TYPE(KC_LEFT), END ); - break; - case 3: - /* :( | ): */ - return MACRODOWN( DOWN(KC_LSFT), TYPE(KC_SCLN), TYPE(KC_9), TYPE(KC_SPC), TYPE(KC_SPC), TYPE(KC_0), TYPE(KC_SCLN), UP(KC_LSFT), TYPE(KC_LEFT), TYPE(KC_LEFT), TYPE(KC_LEFT), END ); - break; - default: - break; - } - return MACRO_NONE; -} diff --git a/keyboard/planck/keymaps/keymap_kyle.c b/keyboard/planck/keymaps/keymap_kyle.c deleted file mode 100644 index da32b74f96..0000000000 --- a/keyboard/planck/keymaps/keymap_kyle.c +++ /dev/null @@ -1,49 +0,0 @@ -#include "keymap_common.h" - -const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { -[0] = { /* Qwerty */ - {KC_ESC, 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_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_RCTL, KC_LCTL, KC_LALT, KC_LGUI, FUNC(2), KC_SPC, KC_SPC, FUNC(1), KC_LEFT, KC_DOWN, KC_UP, KC_RGHT} - // Space is repeated to accommadate for both spacebar wiring positions -}, -[1] = { /* Colemak */ - {KC_ESC, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_BSPC}, - {KC_TAB, 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_FN3, KC_LCTL, KC_LALT, KC_LGUI, FUNC(2), KC_SPC, KC_SPC, FUNC(1), KC_LEFT, KC_DOWN, KC_UP, KC_RGHT} -}, -[2] = { /* 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_TRNS, FUNC(3), FUNC(4), LSFT(RSFT(KC_PAUSE)), KC_TRNS, KC_TRNS, KC_TRNS, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS}, - {KC_TRNS, KC_F11, KC_F12, KC_F13, KC_F14, KC_F15, KC_F16, KC_F17, KC_F18, KC_F19, KC_F20, KC_TRNS}, - {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, FUNC(1), KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY} -}, -[3] = { /* LOWER */ - {S(KC_GRV), S(KC_1), S(KC_2), S(KC_3), S(KC_4), S(KC_5), S(KC_6), S(KC_7), S(KC_8), S(KC_9), S(KC_0), KC_BSPC}, - {KC_TRNS, FUNC(3), FUNC(4), LSFT(RSFT(KC_PAUSE)), LSFT(RSFT(KC_D)), KC_TRNS, KC_TRNS, S(KC_MINS), S(KC_EQL), S(KC_LBRC), S(KC_RBRC), S(KC_BSLS)}, - {KC_TRNS, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_TRNS}, - {BL_STEP, KC_TRNS, KC_TRNS, KC_TRNS, FUNC(2), KC_TRNS, KC_TRNS, KC_TRNS, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY} -} -}; - -const uint16_t PROGMEM fn_actions[] = { - [1] = ACTION_LAYER_MOMENTARY(2), // to RAISE - [2] = ACTION_LAYER_MOMENTARY(3), // to LOWER - - [3] = ACTION_DEFAULT_LAYER_SET(0), - [4] = ACTION_DEFAULT_LAYER_SET(1), - -}; - -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: - return MACRODOWN(T(CM_T), END); - break; - } - return MACRO_NONE; -}; diff --git a/keyboard/planck/keymaps/keymap_leo.c b/keyboard/planck/keymaps/keymap_leo.c deleted file mode 100644 index 6d66441822..0000000000 --- a/keyboard/planck/keymaps/keymap_leo.c +++ /dev/null @@ -1,46 +0,0 @@ -#include "keymap_common.h" - -const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { -[0] = { /* BASE */ - {KC_ESC, KC_LBRC, KC_QUOT, KC_SCLN, KC_P, KC_Y, KC_F, KC_G, KC_C, KC_R, KC_L, KC_BSPC}, - {KC_TAB, KC_A, KC_O, KC_E, KC_U, KC_I, KC_D, KC_H, KC_T, KC_N, KC_S, KC_ENT}, - {KC_LSFT, KC_DOT, KC_Q, KC_J, KC_K, KC_X, KC_B, KC_M, KC_W, KC_V, KC_Z, KC_COMM}, - {KC_LCTL, KC_LALT, KC_LGUI, FUNC(3), FUNC(2), KC_SPC, KC_SPC, FUNC(1), FUNC(3), KC_RGUI, KC_RALT, KC_RCTL} -}, -[2] = { /* RAISE */ - {RALT(KC_RBRC), KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, S(KC_RBRC)}, - {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_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} -}, -[3] = { /* LOWER */ - {S(KC_EQL),S(KC_1),S(KC_2),S(KC_3),RALT(KC_5),S(KC_5), S(KC_6), S(KC_7),RALT(KC_7),RALT(KC_0),S(KC_0), KC_MINS}, - {KC_TRNS,RALT(KC_2),S(KC_SLSH),KC_NUBS,S(KC_NUBS),RALT(KC_MINS),RALT(KC_NUBS), KC_NUHS, S(KC_8), S(KC_9), S(KC_MINS), KC_SLSH}, - {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, RALT(KC_8), RALT(KC_9), 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} -}, -[4] = { /* META */ - {KC_TRNS, KC_HOME, KC_UP, KC_END, KC_TRNS, KC_TRNS, KC_TRNS, KC_HOME, KC_UP, KC_END, KC_TRNS, KC_DEL}, - {KC_TRNS, KC_RGHT, KC_DOWN, KC_LEFT, KC_PGUP, KC_TRNS, KC_PGUP, KC_LEFT, KC_DOWN, KC_RGHT, KC_TRNS, KC_TRNS}, - {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_PGDN, KC_TRNS, KC_PGDN, KC_TRNS, KC_VOLD, KC_VOLU, 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} -} -}; - -const uint16_t PROGMEM fn_actions[] = { - [1] = ACTION_LAYER_MOMENTARY(2), // to RAISE - [2] = ACTION_LAYER_MOMENTARY(3), // to LOWER - [3] = ACTION_LAYER_MOMENTARY(4), // to META - -}; - -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: - return MACRODOWN(T(CM_T), END); - break; - } - return MACRO_NONE; -}; diff --git a/keyboard/planck/keymaps/keymap_lock.c b/keyboard/planck/keymaps/keymap_lock.c deleted file mode 100644 index bc81adcf97..0000000000 --- a/keyboard/planck/keymaps/keymap_lock.c +++ /dev/null @@ -1,123 +0,0 @@ -// USING_MIDI -// USING_BACKLIGHT -#include "keymap_common.h" -#include "backlight.h" -#include "action_layer.h" -#include "keymap_midi.h" -#include - -const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { -[0] = { /* 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}, - {M(0), KC_LCTL, KC_LALT, KC_LGUI, FUNC(2), KC_SPC, KC_SPC, FUNC(1), KC_LEFT, KC_DOWN, KC_UP, KC_RGHT} - // Space is repeated to accommadate for both spacebar wiring positions -}, -[1] = { /* 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}, - {KC_FN3, KC_LCTL, KC_LALT, KC_LGUI, FUNC(2), KC_SPC, KC_SPC, FUNC(1), KC_LEFT, KC_DOWN, KC_UP, KC_RGHT} -}, -[2] = { /* 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_TRNS, FUNC(3), FUNC(4), RESET, KC_TRNS, KC_TRNS, KC_TRNS, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS}, - {KC_TRNS, KC_F11, KC_F12, 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, FUNC(1), KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY} -}, -[3] = { /* LOWER */ - {S(KC_GRV), S(KC_1), S(KC_2), S(KC_3), S(KC_4), S(KC_5), S(KC_6), S(KC_7), S(KC_8), S(KC_9), S(KC_0), KC_BSPC}, - {KC_TRNS, FUNC(3), FUNC(4), RESET, KC_TRNS, KC_TRNS, KC_TRNS, S(KC_MINS), S(KC_EQL), S(KC_LBRC), S(KC_RBRC), S(KC_BSLS)}, - {KC_TRNS, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_TRNS}, - {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, FUNC(2), KC_TRNS, KC_TRNS, KC_TRNS, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY} -}, -[4] = { /* TENKEY */ - {KC_TAB, N_C5, N_D5, N_E5, N_F5, N_G5, N_A5, KC_KP_7, KC_KP_8, KC_KP_9, KC_P, KC_BSPC}, - {KC_ESC, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_KP_4, KC_KP_5, KC_KP_6, KC_SCLN, KC_QUOT}, - {KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_KP_1, KC_KP_2, KC_KP_3, KC_SLSH, KC_ENT}, - {KC_TRNS, KC_LCTL, KC_LALT, KC_LGUI, KC_TRNS, KC_SPC, KC_SPC, KC_KP_0, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT} -}, -[5] = { - { MIDI12 }, - { MIDI12 }, - { MIDI12 }, - {M(0), KC_MS_L, KC_MS_D, KC_MS_U, KC_MS_R, KC_SPC, KC_SPC, FUNC(1), MIDI, MIDI, MIDI, MIDI} -} -}; - -const uint16_t PROGMEM fn_actions[] = { - [1] = ACTION_LAYER_MOMENTARY(2), // to RAISE - [2] = ACTION_LAYER_MOMENTARY(3), // to LOWER - - [3] = ACTION_DEFAULT_LAYER_SET(0), - [4] = ACTION_DEFAULT_LAYER_SET(1), - -}; - -uint16_t hextokeycode(int hex) { - if (hex == 0x0) { - return KC_0; - } else if (hex < 0xA) { - return KC_1 + (hex - 0x1); - } else { - return KC_A + (hex - 0xA); - } -} - -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) { - // play_note(440, 20); - // register_code(KC_RSFT); - backlight_set(BACKLIGHT_LEVELS); - default_layer_and(0); - default_layer_or((1<<5)); - - // uint8_t low = boot_lock_fuse_bits_get(0x0000); - // uint8_t high = boot_lock_fuse_bits_get(0x0003); - // uint8_t ext = boot_lock_fuse_bits_get(0x0002); - // uint8_t lock = boot_lock_fuse_bits_get(0x0001); - - // register_code(hextokeycode((low & 0xF0) >> 4)); - // unregister_code(hextokeycode((low & 0xF0) >> 4)); - // register_code(hextokeycode((low & 0x0F))); - // unregister_code(hextokeycode((low & 0x0F))); - - - // register_code(hextokeycode((high & 0xF0) >> 4)); - // unregister_code(hextokeycode((high & 0xF0) >> 4)); - // register_code(hextokeycode((high & 0x0F))); - // unregister_code(hextokeycode((high & 0x0F))); - - - // register_code(hextokeycode((ext & 0xF0) >> 4)); - // unregister_code(hextokeycode((ext & 0xF0) >> 4)); - // register_code(hextokeycode((ext & 0x0F))); - // unregister_code(hextokeycode((ext & 0x0F))); - - - // register_code(hextokeycode((lock & 0xF0) >> 4)); - // unregister_code(hextokeycode((lock & 0xF0) >> 4)); - // register_code(hextokeycode((lock & 0x0F))); - // unregister_code(hextokeycode((lock & 0x0F))); - - // note(0+12, 20); - // note(0+24, 20); - } else { - // unregister_code(KC_RSFT); - // stop_note(); - backlight_set(0); - default_layer_and(0); - default_layer_or(0); - // note(0+24, 20); - // note(0, 20); - // play_note(4, 20); - } - break; - } - return MACRO_NONE; -}; diff --git a/keyboard/planck/keymaps/keymap_max.c b/keyboard/planck/keymaps/keymap_max.c deleted file mode 100644 index 7fb29bc7a4..0000000000 --- a/keyboard/planck/keymaps/keymap_max.c +++ /dev/null @@ -1,49 +0,0 @@ -#include "keymap_common.h" - -const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { -[0] = { /* Qwerty */ - {KC_ESC, 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_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, 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_QUOT}, - {KC_LCTL, BL_STEP, KC_LALT, KC_LGUI, FUNC(2), KC_SPC, KC_SPC, FUNC(1), KC_LEFT, KC_DOWN, KC_UP, KC_RGHT} - // Space is repeated to accommadate for both spacebar wiring positions -}, -[1] = { /* Colemak */ - {KC_ESC, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_BSPC}, - {KC_TAB, KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O, KC_ENT }, - {KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_QUOT}, - {KC_LCTL, BL_STEP, KC_LALT, KC_LGUI, FUNC(2), KC_SPC, KC_SPC, FUNC(1), KC_LEFT, KC_DOWN, KC_UP, KC_RGHT} -}, -[2] = { /* 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_TRNS, FUNC(3), FUNC(4), RESET, KC_TRNS, KC_TRNS, KC_TRNS, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_TRNS}, - {KC_TRNS, KC_F11, KC_F12, KC_F13, KC_F14, KC_F15, KC_F16, KC_F17, KC_F18, KC_F19, KC_F20, KC_BSLS}, - {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, FUNC(1), KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY} -}, -[3] = { /* LOWER */ - {S(KC_GRV), S(KC_1), S(KC_2), S(KC_3), S(KC_4), S(KC_5), S(KC_6), S(KC_7), S(KC_8), S(KC_9), S(KC_0), KC_BSPC}, - {KC_TRNS, FUNC(3), FUNC(4), RESET, KC_TRNS, KC_TRNS, KC_TRNS, S(KC_MINS), S(KC_EQL), S(KC_LBRC), S(KC_RBRC), KC_TRNS}, - {KC_TRNS, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, S(KC_BSLS)}, - {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, FUNC(2), KC_TRNS, KC_TRNS, KC_TRNS, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY} -} -}; - -const uint16_t PROGMEM fn_actions[] = { - [1] = ACTION_LAYER_MOMENTARY(2), // to RAISE - [2] = ACTION_LAYER_MOMENTARY(3), // to LOWER - - [3] = ACTION_DEFAULT_LAYER_SET(0), - [4] = ACTION_DEFAULT_LAYER_SET(1), - -}; - -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: - return MACRODOWN(T(CM_T), END); - break; - } - return MACRO_NONE; -}; diff --git a/keyboard/planck/keymaps/keymap_monkey.c b/keyboard/planck/keymaps/keymap_monkey.c deleted file mode 100644 index 21a2c146ab..0000000000 --- a/keyboard/planck/keymaps/keymap_monkey.c +++ /dev/null @@ -1,76 +0,0 @@ -#include "keymap_common.h" -#include "backlight.h" -#include "debug.h" - -#define COLEMAK_LAYER 0 -#define QWERTY_LAYER 1 -#define LOWER_LAYER 2 -#define UPPER_LAYER 3 -#define SPACEFN_LAYER 4 -#define TENKEY_LAYER 5 - -const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { -[COLEMAK_LAYER] = { /* Colemak */ - {KC_TAB, UNI(0x1961), KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_BSPC}, - {KC_LCTL, 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}, - {FUNC(5), KC_ESC, KC_LGUI, KC_LALT, FUNC(1), FUNC(6), FUNC(6), FUNC(2), KC_LEFT, KC_DOWN, KC_UP, KC_RGHT} -}, -[QWERTY_LAYER] = { /* 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_LCTL, 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}, - {FUNC(5), KC_ESC, KC_LGUI, KC_LALT, FUNC(1), FUNC(6), FUNC(6), FUNC(2), KC_LEFT, KC_DOWN, KC_UP, KC_RGHT} -}, -[LOWER_LAYER] = { /* LOWER */ - {KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_DELETE}, - {KC_TRNS, FUNC(3), FUNC(4), RESET, DEBUG, KC_TRNS, KC_TRNS, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS}, - {KC_TRNS, KC_F11, KC_F12, 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_HOME, KC_PGDN, KC_PGUP, KC_END} -}, -[UPPER_LAYER] = { /* RAISE */ - {S(KC_GRV), S(KC_1), S(KC_2), S(KC_3), S(KC_4), S(KC_5), S(KC_6), S(KC_7), S(KC_8), S(KC_9), S(KC_0), KC_DELETE}, - {KC_CALC, FUNC(3), FUNC(4), RESET, DEBUG, KC_TRNS, KC_TRNS, S(KC_MINS), S(KC_EQL), S(KC_LBRC), S(KC_RBRC), S(KC_BSLS)}, - {KC_TRNS, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_TRNS}, - {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY} -}, -[SPACEFN_LAYER] = { /* SpaceFN */ - {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_HOME, KC_UP, KC_END, KC_TRNS, KC_TRNS}, - {KC_TRNS, FUNC(3), FUNC(4), KC_TRNS, KC_TRNS, KC_TRNS, KC_PGUP, KC_LEFT, KC_DOWN, KC_RIGHT, KC_TRNS, KC_TRNS}, - {KC_TRNS, KC_F11, KC_F12, KC_TRNS, KC_TRNS, KC_TRNS, KC_PGDN, 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} -}, -[TENKEY_LAYER] = { /* TENKEY */ - {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_KP_7, KC_KP_8, KC_KP_9, KC_PMNS, KC_BSPC}, - {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_KP_4, KC_KP_5, KC_KP_6, KC_PPLS, KC_NLCK}, - {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_KP_1, KC_KP_2, KC_KP_3, KC_PDOT, KC_ENT}, - {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_SPC, KC_SPC, KC_KP_0, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS} -} -}; - -const uint16_t PROGMEM fn_actions[] = { - [1] = ACTION_LAYER_TAP_KEY(LOWER_LAYER, KC_BSPC), // Tap for backspace, hold for LOWER - [2] = ACTION_LAYER_TAP_KEY(UPPER_LAYER, KC_ENT), // Tap for enter, hold for RAISE - - [3] = ACTION_DEFAULT_LAYER_SET(COLEMAK_LAYER), - [4] = ACTION_DEFAULT_LAYER_SET(QWERTY_LAYER), - [5] = ACTION_LAYER_TOGGLE(TENKEY_LAYER), - - [6] = ACTION_LAYER_TAP_KEY(SPACEFN_LAYER, KC_SPC), // Tap for space, hold for SpaceFN -}; - -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); - backlight_step(); - } else { - unregister_code(KC_RSFT); - } - break; - } - return MACRO_NONE; -}; \ No newline at end of file diff --git a/keyboard/planck/keymaps/keymap_numpad.c b/keyboard/planck/keymaps/keymap_numpad.c deleted file mode 100644 index 7de4372ab0..0000000000 --- a/keyboard/planck/keymaps/keymap_numpad.c +++ /dev/null @@ -1,26 +0,0 @@ -#include "keymap_common.h" - -const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { -[0] = { /* Qwerty */ - {KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_KP_MINUS, KC_KP_PLUS, KC_KP_PLUS, KC_KP_ENTER, KC_KP_ENTER}, - {KC_ESC, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_KP_ASTERISK, KC_KP_9, KC_KP_6, KC_KP_3, KC_KP_DOT}, - {KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_KP_SLASH, KC_KP_8, KC_KP_5, KC_KP_2, KC_KP_0}, - {BL_STEP, KC_LCTL, KC_LALT, KC_LGUI, KC_NO, KC_SPC, KC_SPC, KC_NUMLOCK, KC_KP_7, KC_KP_4, KC_KP_1, KC_KP_0} - // Space is repeated to accommadate for both spacebar wiring positions -} -}; - -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: - return MACRODOWN(T(CM_T), END); - break; - } - return MACRO_NONE; -}; \ No newline at end of file diff --git a/keyboard/planck/keymaps/kyle.c b/keyboard/planck/keymaps/kyle.c new file mode 100644 index 0000000000..da32b74f96 --- /dev/null +++ b/keyboard/planck/keymaps/kyle.c @@ -0,0 +1,49 @@ +#include "keymap_common.h" + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { +[0] = { /* Qwerty */ + {KC_ESC, 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_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_RCTL, KC_LCTL, KC_LALT, KC_LGUI, FUNC(2), KC_SPC, KC_SPC, FUNC(1), KC_LEFT, KC_DOWN, KC_UP, KC_RGHT} + // Space is repeated to accommadate for both spacebar wiring positions +}, +[1] = { /* Colemak */ + {KC_ESC, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_BSPC}, + {KC_TAB, 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_FN3, KC_LCTL, KC_LALT, KC_LGUI, FUNC(2), KC_SPC, KC_SPC, FUNC(1), KC_LEFT, KC_DOWN, KC_UP, KC_RGHT} +}, +[2] = { /* 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_TRNS, FUNC(3), FUNC(4), LSFT(RSFT(KC_PAUSE)), KC_TRNS, KC_TRNS, KC_TRNS, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS}, + {KC_TRNS, KC_F11, KC_F12, KC_F13, KC_F14, KC_F15, KC_F16, KC_F17, KC_F18, KC_F19, KC_F20, KC_TRNS}, + {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, FUNC(1), KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY} +}, +[3] = { /* LOWER */ + {S(KC_GRV), S(KC_1), S(KC_2), S(KC_3), S(KC_4), S(KC_5), S(KC_6), S(KC_7), S(KC_8), S(KC_9), S(KC_0), KC_BSPC}, + {KC_TRNS, FUNC(3), FUNC(4), LSFT(RSFT(KC_PAUSE)), LSFT(RSFT(KC_D)), KC_TRNS, KC_TRNS, S(KC_MINS), S(KC_EQL), S(KC_LBRC), S(KC_RBRC), S(KC_BSLS)}, + {KC_TRNS, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_TRNS}, + {BL_STEP, KC_TRNS, KC_TRNS, KC_TRNS, FUNC(2), KC_TRNS, KC_TRNS, KC_TRNS, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY} +} +}; + +const uint16_t PROGMEM fn_actions[] = { + [1] = ACTION_LAYER_MOMENTARY(2), // to RAISE + [2] = ACTION_LAYER_MOMENTARY(3), // to LOWER + + [3] = ACTION_DEFAULT_LAYER_SET(0), + [4] = ACTION_DEFAULT_LAYER_SET(1), + +}; + +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: + return MACRODOWN(T(CM_T), END); + break; + } + return MACRO_NONE; +}; diff --git a/keyboard/planck/keymaps/leo.c b/keyboard/planck/keymaps/leo.c new file mode 100644 index 0000000000..6d66441822 --- /dev/null +++ b/keyboard/planck/keymaps/leo.c @@ -0,0 +1,46 @@ +#include "keymap_common.h" + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { +[0] = { /* BASE */ + {KC_ESC, KC_LBRC, KC_QUOT, KC_SCLN, KC_P, KC_Y, KC_F, KC_G, KC_C, KC_R, KC_L, KC_BSPC}, + {KC_TAB, KC_A, KC_O, KC_E, KC_U, KC_I, KC_D, KC_H, KC_T, KC_N, KC_S, KC_ENT}, + {KC_LSFT, KC_DOT, KC_Q, KC_J, KC_K, KC_X, KC_B, KC_M, KC_W, KC_V, KC_Z, KC_COMM}, + {KC_LCTL, KC_LALT, KC_LGUI, FUNC(3), FUNC(2), KC_SPC, KC_SPC, FUNC(1), FUNC(3), KC_RGUI, KC_RALT, KC_RCTL} +}, +[2] = { /* RAISE */ + {RALT(KC_RBRC), KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, S(KC_RBRC)}, + {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_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} +}, +[3] = { /* LOWER */ + {S(KC_EQL),S(KC_1),S(KC_2),S(KC_3),RALT(KC_5),S(KC_5), S(KC_6), S(KC_7),RALT(KC_7),RALT(KC_0),S(KC_0), KC_MINS}, + {KC_TRNS,RALT(KC_2),S(KC_SLSH),KC_NUBS,S(KC_NUBS),RALT(KC_MINS),RALT(KC_NUBS), KC_NUHS, S(KC_8), S(KC_9), S(KC_MINS), KC_SLSH}, + {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, RALT(KC_8), RALT(KC_9), 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} +}, +[4] = { /* META */ + {KC_TRNS, KC_HOME, KC_UP, KC_END, KC_TRNS, KC_TRNS, KC_TRNS, KC_HOME, KC_UP, KC_END, KC_TRNS, KC_DEL}, + {KC_TRNS, KC_RGHT, KC_DOWN, KC_LEFT, KC_PGUP, KC_TRNS, KC_PGUP, KC_LEFT, KC_DOWN, KC_RGHT, KC_TRNS, KC_TRNS}, + {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_PGDN, KC_TRNS, KC_PGDN, KC_TRNS, KC_VOLD, KC_VOLU, 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} +} +}; + +const uint16_t PROGMEM fn_actions[] = { + [1] = ACTION_LAYER_MOMENTARY(2), // to RAISE + [2] = ACTION_LAYER_MOMENTARY(3), // to LOWER + [3] = ACTION_LAYER_MOMENTARY(4), // to META + +}; + +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: + return MACRODOWN(T(CM_T), END); + break; + } + return MACRO_NONE; +}; diff --git a/keyboard/planck/keymaps/lock.c b/keyboard/planck/keymaps/lock.c new file mode 100644 index 0000000000..bc81adcf97 --- /dev/null +++ b/keyboard/planck/keymaps/lock.c @@ -0,0 +1,123 @@ +// USING_MIDI +// USING_BACKLIGHT +#include "keymap_common.h" +#include "backlight.h" +#include "action_layer.h" +#include "keymap_midi.h" +#include + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { +[0] = { /* 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}, + {M(0), KC_LCTL, KC_LALT, KC_LGUI, FUNC(2), KC_SPC, KC_SPC, FUNC(1), KC_LEFT, KC_DOWN, KC_UP, KC_RGHT} + // Space is repeated to accommadate for both spacebar wiring positions +}, +[1] = { /* 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}, + {KC_FN3, KC_LCTL, KC_LALT, KC_LGUI, FUNC(2), KC_SPC, KC_SPC, FUNC(1), KC_LEFT, KC_DOWN, KC_UP, KC_RGHT} +}, +[2] = { /* 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_TRNS, FUNC(3), FUNC(4), RESET, KC_TRNS, KC_TRNS, KC_TRNS, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS}, + {KC_TRNS, KC_F11, KC_F12, 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, FUNC(1), KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY} +}, +[3] = { /* LOWER */ + {S(KC_GRV), S(KC_1), S(KC_2), S(KC_3), S(KC_4), S(KC_5), S(KC_6), S(KC_7), S(KC_8), S(KC_9), S(KC_0), KC_BSPC}, + {KC_TRNS, FUNC(3), FUNC(4), RESET, KC_TRNS, KC_TRNS, KC_TRNS, S(KC_MINS), S(KC_EQL), S(KC_LBRC), S(KC_RBRC), S(KC_BSLS)}, + {KC_TRNS, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_TRNS}, + {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, FUNC(2), KC_TRNS, KC_TRNS, KC_TRNS, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY} +}, +[4] = { /* TENKEY */ + {KC_TAB, N_C5, N_D5, N_E5, N_F5, N_G5, N_A5, KC_KP_7, KC_KP_8, KC_KP_9, KC_P, KC_BSPC}, + {KC_ESC, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_KP_4, KC_KP_5, KC_KP_6, KC_SCLN, KC_QUOT}, + {KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_KP_1, KC_KP_2, KC_KP_3, KC_SLSH, KC_ENT}, + {KC_TRNS, KC_LCTL, KC_LALT, KC_LGUI, KC_TRNS, KC_SPC, KC_SPC, KC_KP_0, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT} +}, +[5] = { + { MIDI12 }, + { MIDI12 }, + { MIDI12 }, + {M(0), KC_MS_L, KC_MS_D, KC_MS_U, KC_MS_R, KC_SPC, KC_SPC, FUNC(1), MIDI, MIDI, MIDI, MIDI} +} +}; + +const uint16_t PROGMEM fn_actions[] = { + [1] = ACTION_LAYER_MOMENTARY(2), // to RAISE + [2] = ACTION_LAYER_MOMENTARY(3), // to LOWER + + [3] = ACTION_DEFAULT_LAYER_SET(0), + [4] = ACTION_DEFAULT_LAYER_SET(1), + +}; + +uint16_t hextokeycode(int hex) { + if (hex == 0x0) { + return KC_0; + } else if (hex < 0xA) { + return KC_1 + (hex - 0x1); + } else { + return KC_A + (hex - 0xA); + } +} + +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) { + // play_note(440, 20); + // register_code(KC_RSFT); + backlight_set(BACKLIGHT_LEVELS); + default_layer_and(0); + default_layer_or((1<<5)); + + // uint8_t low = boot_lock_fuse_bits_get(0x0000); + // uint8_t high = boot_lock_fuse_bits_get(0x0003); + // uint8_t ext = boot_lock_fuse_bits_get(0x0002); + // uint8_t lock = boot_lock_fuse_bits_get(0x0001); + + // register_code(hextokeycode((low & 0xF0) >> 4)); + // unregister_code(hextokeycode((low & 0xF0) >> 4)); + // register_code(hextokeycode((low & 0x0F))); + // unregister_code(hextokeycode((low & 0x0F))); + + + // register_code(hextokeycode((high & 0xF0) >> 4)); + // unregister_code(hextokeycode((high & 0xF0) >> 4)); + // register_code(hextokeycode((high & 0x0F))); + // unregister_code(hextokeycode((high & 0x0F))); + + + // register_code(hextokeycode((ext & 0xF0) >> 4)); + // unregister_code(hextokeycode((ext & 0xF0) >> 4)); + // register_code(hextokeycode((ext & 0x0F))); + // unregister_code(hextokeycode((ext & 0x0F))); + + + // register_code(hextokeycode((lock & 0xF0) >> 4)); + // unregister_code(hextokeycode((lock & 0xF0) >> 4)); + // register_code(hextokeycode((lock & 0x0F))); + // unregister_code(hextokeycode((lock & 0x0F))); + + // note(0+12, 20); + // note(0+24, 20); + } else { + // unregister_code(KC_RSFT); + // stop_note(); + backlight_set(0); + default_layer_and(0); + default_layer_or(0); + // note(0+24, 20); + // note(0, 20); + // play_note(4, 20); + } + break; + } + return MACRO_NONE; +}; diff --git a/keyboard/planck/keymaps/max.c b/keyboard/planck/keymaps/max.c new file mode 100644 index 0000000000..7fb29bc7a4 --- /dev/null +++ b/keyboard/planck/keymaps/max.c @@ -0,0 +1,49 @@ +#include "keymap_common.h" + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { +[0] = { /* Qwerty */ + {KC_ESC, 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_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, 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_QUOT}, + {KC_LCTL, BL_STEP, KC_LALT, KC_LGUI, FUNC(2), KC_SPC, KC_SPC, FUNC(1), KC_LEFT, KC_DOWN, KC_UP, KC_RGHT} + // Space is repeated to accommadate for both spacebar wiring positions +}, +[1] = { /* Colemak */ + {KC_ESC, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_BSPC}, + {KC_TAB, KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O, KC_ENT }, + {KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_QUOT}, + {KC_LCTL, BL_STEP, KC_LALT, KC_LGUI, FUNC(2), KC_SPC, KC_SPC, FUNC(1), KC_LEFT, KC_DOWN, KC_UP, KC_RGHT} +}, +[2] = { /* 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_TRNS, FUNC(3), FUNC(4), RESET, KC_TRNS, KC_TRNS, KC_TRNS, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_TRNS}, + {KC_TRNS, KC_F11, KC_F12, KC_F13, KC_F14, KC_F15, KC_F16, KC_F17, KC_F18, KC_F19, KC_F20, KC_BSLS}, + {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, FUNC(1), KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY} +}, +[3] = { /* LOWER */ + {S(KC_GRV), S(KC_1), S(KC_2), S(KC_3), S(KC_4), S(KC_5), S(KC_6), S(KC_7), S(KC_8), S(KC_9), S(KC_0), KC_BSPC}, + {KC_TRNS, FUNC(3), FUNC(4), RESET, KC_TRNS, KC_TRNS, KC_TRNS, S(KC_MINS), S(KC_EQL), S(KC_LBRC), S(KC_RBRC), KC_TRNS}, + {KC_TRNS, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, S(KC_BSLS)}, + {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, FUNC(2), KC_TRNS, KC_TRNS, KC_TRNS, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY} +} +}; + +const uint16_t PROGMEM fn_actions[] = { + [1] = ACTION_LAYER_MOMENTARY(2), // to RAISE + [2] = ACTION_LAYER_MOMENTARY(3), // to LOWER + + [3] = ACTION_DEFAULT_LAYER_SET(0), + [4] = ACTION_DEFAULT_LAYER_SET(1), + +}; + +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: + return MACRODOWN(T(CM_T), END); + break; + } + return MACRO_NONE; +}; diff --git a/keyboard/planck/keymaps/monkey.c b/keyboard/planck/keymaps/monkey.c new file mode 100644 index 0000000000..21a2c146ab --- /dev/null +++ b/keyboard/planck/keymaps/monkey.c @@ -0,0 +1,76 @@ +#include "keymap_common.h" +#include "backlight.h" +#include "debug.h" + +#define COLEMAK_LAYER 0 +#define QWERTY_LAYER 1 +#define LOWER_LAYER 2 +#define UPPER_LAYER 3 +#define SPACEFN_LAYER 4 +#define TENKEY_LAYER 5 + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { +[COLEMAK_LAYER] = { /* Colemak */ + {KC_TAB, UNI(0x1961), KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_BSPC}, + {KC_LCTL, 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}, + {FUNC(5), KC_ESC, KC_LGUI, KC_LALT, FUNC(1), FUNC(6), FUNC(6), FUNC(2), KC_LEFT, KC_DOWN, KC_UP, KC_RGHT} +}, +[QWERTY_LAYER] = { /* 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_LCTL, 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}, + {FUNC(5), KC_ESC, KC_LGUI, KC_LALT, FUNC(1), FUNC(6), FUNC(6), FUNC(2), KC_LEFT, KC_DOWN, KC_UP, KC_RGHT} +}, +[LOWER_LAYER] = { /* LOWER */ + {KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_DELETE}, + {KC_TRNS, FUNC(3), FUNC(4), RESET, DEBUG, KC_TRNS, KC_TRNS, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS}, + {KC_TRNS, KC_F11, KC_F12, 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_HOME, KC_PGDN, KC_PGUP, KC_END} +}, +[UPPER_LAYER] = { /* RAISE */ + {S(KC_GRV), S(KC_1), S(KC_2), S(KC_3), S(KC_4), S(KC_5), S(KC_6), S(KC_7), S(KC_8), S(KC_9), S(KC_0), KC_DELETE}, + {KC_CALC, FUNC(3), FUNC(4), RESET, DEBUG, KC_TRNS, KC_TRNS, S(KC_MINS), S(KC_EQL), S(KC_LBRC), S(KC_RBRC), S(KC_BSLS)}, + {KC_TRNS, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_TRNS}, + {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY} +}, +[SPACEFN_LAYER] = { /* SpaceFN */ + {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_HOME, KC_UP, KC_END, KC_TRNS, KC_TRNS}, + {KC_TRNS, FUNC(3), FUNC(4), KC_TRNS, KC_TRNS, KC_TRNS, KC_PGUP, KC_LEFT, KC_DOWN, KC_RIGHT, KC_TRNS, KC_TRNS}, + {KC_TRNS, KC_F11, KC_F12, KC_TRNS, KC_TRNS, KC_TRNS, KC_PGDN, 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} +}, +[TENKEY_LAYER] = { /* TENKEY */ + {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_KP_7, KC_KP_8, KC_KP_9, KC_PMNS, KC_BSPC}, + {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_KP_4, KC_KP_5, KC_KP_6, KC_PPLS, KC_NLCK}, + {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_KP_1, KC_KP_2, KC_KP_3, KC_PDOT, KC_ENT}, + {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_SPC, KC_SPC, KC_KP_0, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS} +} +}; + +const uint16_t PROGMEM fn_actions[] = { + [1] = ACTION_LAYER_TAP_KEY(LOWER_LAYER, KC_BSPC), // Tap for backspace, hold for LOWER + [2] = ACTION_LAYER_TAP_KEY(UPPER_LAYER, KC_ENT), // Tap for enter, hold for RAISE + + [3] = ACTION_DEFAULT_LAYER_SET(COLEMAK_LAYER), + [4] = ACTION_DEFAULT_LAYER_SET(QWERTY_LAYER), + [5] = ACTION_LAYER_TOGGLE(TENKEY_LAYER), + + [6] = ACTION_LAYER_TAP_KEY(SPACEFN_LAYER, KC_SPC), // Tap for space, hold for SpaceFN +}; + +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); + backlight_step(); + } else { + unregister_code(KC_RSFT); + } + break; + } + return MACRO_NONE; +}; \ No newline at end of file diff --git a/keyboard/planck/keymaps/numpad.c b/keyboard/planck/keymaps/numpad.c new file mode 100644 index 0000000000..7de4372ab0 --- /dev/null +++ b/keyboard/planck/keymaps/numpad.c @@ -0,0 +1,26 @@ +#include "keymap_common.h" + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { +[0] = { /* Qwerty */ + {KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_KP_MINUS, KC_KP_PLUS, KC_KP_PLUS, KC_KP_ENTER, KC_KP_ENTER}, + {KC_ESC, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_KP_ASTERISK, KC_KP_9, KC_KP_6, KC_KP_3, KC_KP_DOT}, + {KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_KP_SLASH, KC_KP_8, KC_KP_5, KC_KP_2, KC_KP_0}, + {BL_STEP, KC_LCTL, KC_LALT, KC_LGUI, KC_NO, KC_SPC, KC_SPC, KC_NUMLOCK, KC_KP_7, KC_KP_4, KC_KP_1, KC_KP_0} + // Space is repeated to accommadate for both spacebar wiring positions +} +}; + +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: + return MACRODOWN(T(CM_T), END); + break; + } + return MACRO_NONE; +}; \ No newline at end of file diff --git a/keyboard/planck/keymaps/test/default.c b/keyboard/planck/keymaps/test/default.c new file mode 100644 index 0000000000..bc81adcf97 --- /dev/null +++ b/keyboard/planck/keymaps/test/default.c @@ -0,0 +1,123 @@ +// USING_MIDI +// USING_BACKLIGHT +#include "keymap_common.h" +#include "backlight.h" +#include "action_layer.h" +#include "keymap_midi.h" +#include + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { +[0] = { /* 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}, + {M(0), KC_LCTL, KC_LALT, KC_LGUI, FUNC(2), KC_SPC, KC_SPC, FUNC(1), KC_LEFT, KC_DOWN, KC_UP, KC_RGHT} + // Space is repeated to accommadate for both spacebar wiring positions +}, +[1] = { /* 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}, + {KC_FN3, KC_LCTL, KC_LALT, KC_LGUI, FUNC(2), KC_SPC, KC_SPC, FUNC(1), KC_LEFT, KC_DOWN, KC_UP, KC_RGHT} +}, +[2] = { /* 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_TRNS, FUNC(3), FUNC(4), RESET, KC_TRNS, KC_TRNS, KC_TRNS, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS}, + {KC_TRNS, KC_F11, KC_F12, 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, FUNC(1), KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY} +}, +[3] = { /* LOWER */ + {S(KC_GRV), S(KC_1), S(KC_2), S(KC_3), S(KC_4), S(KC_5), S(KC_6), S(KC_7), S(KC_8), S(KC_9), S(KC_0), KC_BSPC}, + {KC_TRNS, FUNC(3), FUNC(4), RESET, KC_TRNS, KC_TRNS, KC_TRNS, S(KC_MINS), S(KC_EQL), S(KC_LBRC), S(KC_RBRC), S(KC_BSLS)}, + {KC_TRNS, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_TRNS}, + {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, FUNC(2), KC_TRNS, KC_TRNS, KC_TRNS, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY} +}, +[4] = { /* TENKEY */ + {KC_TAB, N_C5, N_D5, N_E5, N_F5, N_G5, N_A5, KC_KP_7, KC_KP_8, KC_KP_9, KC_P, KC_BSPC}, + {KC_ESC, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_KP_4, KC_KP_5, KC_KP_6, KC_SCLN, KC_QUOT}, + {KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_KP_1, KC_KP_2, KC_KP_3, KC_SLSH, KC_ENT}, + {KC_TRNS, KC_LCTL, KC_LALT, KC_LGUI, KC_TRNS, KC_SPC, KC_SPC, KC_KP_0, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT} +}, +[5] = { + { MIDI12 }, + { MIDI12 }, + { MIDI12 }, + {M(0), KC_MS_L, KC_MS_D, KC_MS_U, KC_MS_R, KC_SPC, KC_SPC, FUNC(1), MIDI, MIDI, MIDI, MIDI} +} +}; + +const uint16_t PROGMEM fn_actions[] = { + [1] = ACTION_LAYER_MOMENTARY(2), // to RAISE + [2] = ACTION_LAYER_MOMENTARY(3), // to LOWER + + [3] = ACTION_DEFAULT_LAYER_SET(0), + [4] = ACTION_DEFAULT_LAYER_SET(1), + +}; + +uint16_t hextokeycode(int hex) { + if (hex == 0x0) { + return KC_0; + } else if (hex < 0xA) { + return KC_1 + (hex - 0x1); + } else { + return KC_A + (hex - 0xA); + } +} + +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) { + // play_note(440, 20); + // register_code(KC_RSFT); + backlight_set(BACKLIGHT_LEVELS); + default_layer_and(0); + default_layer_or((1<<5)); + + // uint8_t low = boot_lock_fuse_bits_get(0x0000); + // uint8_t high = boot_lock_fuse_bits_get(0x0003); + // uint8_t ext = boot_lock_fuse_bits_get(0x0002); + // uint8_t lock = boot_lock_fuse_bits_get(0x0001); + + // register_code(hextokeycode((low & 0xF0) >> 4)); + // unregister_code(hextokeycode((low & 0xF0) >> 4)); + // register_code(hextokeycode((low & 0x0F))); + // unregister_code(hextokeycode((low & 0x0F))); + + + // register_code(hextokeycode((high & 0xF0) >> 4)); + // unregister_code(hextokeycode((high & 0xF0) >> 4)); + // register_code(hextokeycode((high & 0x0F))); + // unregister_code(hextokeycode((high & 0x0F))); + + + // register_code(hextokeycode((ext & 0xF0) >> 4)); + // unregister_code(hextokeycode((ext & 0xF0) >> 4)); + // register_code(hextokeycode((ext & 0x0F))); + // unregister_code(hextokeycode((ext & 0x0F))); + + + // register_code(hextokeycode((lock & 0xF0) >> 4)); + // unregister_code(hextokeycode((lock & 0xF0) >> 4)); + // register_code(hextokeycode((lock & 0x0F))); + // unregister_code(hextokeycode((lock & 0x0F))); + + // note(0+12, 20); + // note(0+24, 20); + } else { + // unregister_code(KC_RSFT); + // stop_note(); + backlight_set(0); + default_layer_and(0); + default_layer_or(0); + // note(0+24, 20); + // note(0, 20); + // play_note(4, 20); + } + break; + } + return MACRO_NONE; +}; -- cgit v1.2.3 From c9a096dc99a2af45d288f9915d70fa339c0e5a6e Mon Sep 17 00:00:00 2001 From: Jack Humbert Date: Sat, 16 Jan 2016 00:57:35 -0500 Subject: added error for keymap file not existing --- keyboard/planck/Makefile | 4 ++++ 1 file changed, 4 insertions(+) (limited to 'keyboard') diff --git a/keyboard/planck/Makefile b/keyboard/planck/Makefile index f3537b2c7a..ff68ea0fb3 100644 --- a/keyboard/planck/Makefile +++ b/keyboard/planck/Makefile @@ -57,7 +57,11 @@ ifdef KEYMAP ifneq ("$(wildcard keymaps/$(KEYMAP).c)","") KEYMAP_FILE = keymaps/$(KEYMAP).c else +ifneq ("$(wildcard keymaps/$(KEYMAP)/default.c)","") KEYMAP_FILE = keymaps/$(KEYMAP)/default.c +else +$(error Keymap file does not exist) +endif endif else ifneq ("$(wildcard keymaps/default.c)","") -- cgit v1.2.3 From f66a251e5d9d741ccd3eda5a87de5a71c14843e9 Mon Sep 17 00:00:00 2001 From: Jack Humbert Date: Sat, 16 Jan 2016 01:01:32 -0500 Subject: I guess I can reference #90 in the commit message --- keyboard/planck/keymaps/test/README.md | 3 +++ keyboard/planck/keymaps/test/default.c | 38 ---------------------------------- 2 files changed, 3 insertions(+), 38 deletions(-) create mode 100644 keyboard/planck/keymaps/test/README.md (limited to 'keyboard') diff --git a/keyboard/planck/keymaps/test/README.md b/keyboard/planck/keymaps/test/README.md new file mode 100644 index 0000000000..c555d2ddc9 --- /dev/null +++ b/keyboard/planck/keymaps/test/README.md @@ -0,0 +1,3 @@ +# Testing out this! + +This folder will probably get deleted before merging. \ No newline at end of file diff --git a/keyboard/planck/keymaps/test/default.c b/keyboard/planck/keymaps/test/default.c index bc81adcf97..71bd6c91e5 100644 --- a/keyboard/planck/keymaps/test/default.c +++ b/keyboard/planck/keymaps/test/default.c @@ -71,51 +71,13 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) switch(id) { case 0: if (record->event.pressed) { - // play_note(440, 20); - // register_code(KC_RSFT); backlight_set(BACKLIGHT_LEVELS); default_layer_and(0); default_layer_or((1<<5)); - - // uint8_t low = boot_lock_fuse_bits_get(0x0000); - // uint8_t high = boot_lock_fuse_bits_get(0x0003); - // uint8_t ext = boot_lock_fuse_bits_get(0x0002); - // uint8_t lock = boot_lock_fuse_bits_get(0x0001); - - // register_code(hextokeycode((low & 0xF0) >> 4)); - // unregister_code(hextokeycode((low & 0xF0) >> 4)); - // register_code(hextokeycode((low & 0x0F))); - // unregister_code(hextokeycode((low & 0x0F))); - - - // register_code(hextokeycode((high & 0xF0) >> 4)); - // unregister_code(hextokeycode((high & 0xF0) >> 4)); - // register_code(hextokeycode((high & 0x0F))); - // unregister_code(hextokeycode((high & 0x0F))); - - - // register_code(hextokeycode((ext & 0xF0) >> 4)); - // unregister_code(hextokeycode((ext & 0xF0) >> 4)); - // register_code(hextokeycode((ext & 0x0F))); - // unregister_code(hextokeycode((ext & 0x0F))); - - - // register_code(hextokeycode((lock & 0xF0) >> 4)); - // unregister_code(hextokeycode((lock & 0xF0) >> 4)); - // register_code(hextokeycode((lock & 0x0F))); - // unregister_code(hextokeycode((lock & 0x0F))); - - // note(0+12, 20); - // note(0+24, 20); } else { - // unregister_code(KC_RSFT); - // stop_note(); backlight_set(0); default_layer_and(0); default_layer_or(0); - // note(0+24, 20); - // note(0, 20); - // play_note(4, 20); } break; } -- cgit v1.2.3 From fb181304083b884c60a30f64a634b592479aed6d Mon Sep 17 00:00:00 2001 From: Didier Loiseau Date: Sat, 16 Jan 2016 01:35:28 +0100 Subject: Implemented Dvorak layer --- keyboard/ergodox_ez/keymaps/keymap_typematrix.c | 76 ++++++++++++++++++++----- 1 file changed, 63 insertions(+), 13 deletions(-) (limited to 'keyboard') diff --git a/keyboard/ergodox_ez/keymaps/keymap_typematrix.c b/keyboard/ergodox_ez/keymaps/keymap_typematrix.c index 04d91b45bf..931170c387 100644 --- a/keyboard/ergodox_ez/keymaps/keymap_typematrix.c +++ b/keyboard/ergodox_ez/keymaps/keymap_typematrix.c @@ -10,14 +10,17 @@ * - ] is moved in place of the dash (-) * - dash (-) and = are moved on bottom right row * - arrows and PgUp/PgDn are moved on the thumbs - * Layer 1: numbers layer close to the TM when toggling "num" with the following differences: + * Layer 1: same as Layer 0 but with Dvorak layout, to use with QWERTY OS layout. + * Enable Dvorak layout with Magic-1 (LShift-RShift-1), disable with Magic-0. + * Layer 8: numbers layer close to the TM when toggling "num" with the following differences: * - numpad is displaced by 1 to the top left * - arrows are displaced by 1 to the left * - provides access to F1-F12, caps lock and num lock - * Layer 2: "fn" layer ("fn" key toggles both layers 1 & 2) with the following differences: + * Layer 9: "fn" layer ("fn" key toggles both layers 1 & 2) with the following differences: * - VolUp & VolDn are only on left hand to keep access to arrows on right hand - * Leds: - * - left (1st) & middle (2nd) leds are used to indicate layers 1 & 2 respectively + * LEDs: + * - left (1st) led is used to indicate the numbers layer + * - middle (2nd) led is used to indicate Dvorak layout * - right (3rd) led is used to indicate caps-lock */ #include "ergodox_ez.h" @@ -26,8 +29,9 @@ #include "led.h" #define BASE 0 // default layer -#define NMBR 1 // numbers layer -#define FNLR 2 // fn layer +#define DVRK 1 // Dvorak layer +#define NMBR 8 // numbers layer +#define FNLR 9 // fn layer #define MDBL0 1 #define MFNLR 2 @@ -36,7 +40,7 @@ #define MPSTE 5 const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { -/* Keymap 0: Basic layer +/* Basic layer * * ,--------------------------------------------------. ,--------------------------------------------------. * | ` | 1 | 2 | 3 | 4 | 5 | Del | | Del | 6 | 7 | 8 | 9 | 0 | ] | @@ -50,7 +54,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * |LCtrl | fn | LGui | Play |App/Alt| | RAlt | - | Home | = |End/Ctl| * `-----------------------------------' `-----------------------------------' * ,--------------. ,-------------. - * |Esc/Alt| L1 | | Left |Right | + * |Esc/Alt| num | | Left |Right | * ,------+-------+------| |------+------+------. * | | | PgUp | | Up | | | * |Space |LShift |------| |------|RShift|Space | @@ -67,7 +71,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_ENT, KC_LCTL, M(MFNLR), KC_LGUI,KC_MPLY,ALT_T(KC_APP), - ALT_T(KC_ESC), TG(1), + ALT_T(KC_ESC), TG(NMBR), KC_PGUP, KC_SPC, KC_LSFT, KC_PGDN, @@ -82,7 +86,53 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { KC_UP, KC_DOWN, KC_RSFT, KC_SPC ), -/* Keymap 1: Numbers Layer +/* Dvorak layer + * + * ,--------------------------------------------------. ,--------------------------------------------------. + * | ` | 1 | 2 | 3 | 4 | 5 | Del | | Del | 6 | 7 | 8 | 9 | 0 | = | + * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| + * | Tab | ' | , | . | P | Y |Backsp| |Backsp| F | G | C | R | L | / | + * |--------+------+------+------+------+------|ace | |ace |------+------+------+------+------+--------| + * | LShift | A | O | E | U | I |------| |------| D | H | T | N | S | -/Shift| + * |--------+------+------+------+------+------|Enter | |Enter |------+------+------+------+------+--------| + * | LShift | ; | Q | J | K | X | | | | B | M | W | V | Z | \/Shift| + * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' + * |LCtrl | fn | LGui | Play |App/Alt| | RAlt | [ | Home | ] |End/Ctl| + * `-----------------------------------' `-----------------------------------' + * ,--------------. ,-------------. + * |Esc/Alt| num | | Left |Right | + * ,------+-------+------| |------+------+------. + * | | | PgUp | | Up | | | + * |Space |LShift |------| |------|RShift|Space | + * | | | PgDn | | Down | | | + * `---------------------' `--------------------' + */ +// If it accepts an argument (i.e, is a function), it doesn't need KC_. +// Otherwise, it needs KC_* +[DVRK] = KEYMAP( // layer 0 : default + // left hand + KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_DELT, + KC_TAB, KC_QUOT, KC_COMM, KC_DOT, KC_P, KC_Y, KC_BSPC, + KC_LSFT, KC_A, KC_O, KC_E, KC_U, KC_I, + KC_LSFT, KC_SCLN, KC_Q, KC_J, KC_K, KC_X, KC_ENT, + KC_LCTL, M(MFNLR), KC_LGUI, KC_MPLY, ALT_T(KC_APP), + + ALT_T(KC_ESC), TG(NMBR), + KC_PGUP, + KC_SPC, KC_LSFT, KC_PGDN, + + // right hand + KC_DELT, KC_6, KC_7, KC_8, KC_9, KC_0, KC_EQL, + KC_BSPC, KC_F, KC_G, KC_C, KC_R, KC_L, KC_SLSH, + KC_D, KC_H, KC_T, KC_N, KC_S, SFT_T(KC_MINS), + KC_ENT, KC_B, KC_M, KC_W, KC_V, KC_Z, SFT_T(KC_BSLS), + KC_RALT, KC_LBRC, KC_HOME, KC_RBRC, CTL_T(KC_END), + + KC_LEFT, KC_RGHT, + KC_UP, + KC_DOWN, KC_RSFT, KC_SPC + ), +/* Numbers Layer * * ,--------------------------------------------------. ,--------------------------------------------------. * | | F1 | F2 | F3 | F4 | F5 | | | | | | Tab | / | * | - | @@ -126,7 +176,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS ), -/* Keymap 2: fn layer +/* fn layer * * ,--------------------------------------------------. ,--------------------------------------------------. * | | | | | | |Insert| |Insert|Eject |Power |Sleep | Wake |PrtScr|ScrollLk| @@ -221,8 +271,8 @@ void * matrix_scan_user(void) { if (layer_state & (1 << NMBR)) { ergodox_right_led_1_on(); } - // led 2: fn layer - if (layer_state & (1 << FNLR)) { + // led 2: Dvorak layer + if (default_layer_state == 1 << DVRK) { ergodox_right_led_2_on(); } // led 3: caps lock -- cgit v1.2.3 From eb61700912f1713ba27d34c23d7f07be66ee6513 Mon Sep 17 00:00:00 2001 From: Jack Humbert Date: Wed, 20 Jan 2016 00:06:52 -0500 Subject: better integrations --- keyboard/planck/Makefile | 7 ++-- keyboard/planck/keymaps/keymap_default.c | 8 +++-- keyboard/planck/keymaps/keymap_lock.c | 60 ++++++-------------------------- keyboard/planck/planck.h | 4 ++- 4 files changed, 25 insertions(+), 54 deletions(-) (limited to 'keyboard') diff --git a/keyboard/planck/Makefile b/keyboard/planck/Makefile index fdf8c16400..7b06446d74 100644 --- a/keyboard/planck/Makefile +++ b/keyboard/planck/Makefile @@ -50,8 +50,7 @@ TMK_DIR = ../../tmk_core TARGET_DIR = . # # project specific files -SRC = planck.c \ - backlight.c +SRC = planck.c ifdef KEYMAP SRC := keymaps/keymap_$(KEYMAP).c $(SRC) @@ -124,9 +123,13 @@ COMMAND_ENABLE = yes # Commands for debug and configuration # NKRO_ENABLE = yes # USB Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work # BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality MIDI_ENABLE = YES # MIDI controls +AUDIO_ENABLE = YES # Audio output on port C6 # UNICODE_ENABLE = YES # Unicode # BLUETOOTH_ENABLE = yes # Enable Bluetooth with the Adafruit EZ-Key HID +ifdef BACKLIGHT_ENABLE + SRC += backlight.c +endif # Optimize size but this may cause error "relocation truncated to fit" #EXTRALDFLAGS = -Wl,--relax diff --git a/keyboard/planck/keymaps/keymap_default.c b/keyboard/planck/keymaps/keymap_default.c index 49670dafd3..a9c2a06813 100644 --- a/keyboard/planck/keymaps/keymap_default.c +++ b/keyboard/planck/keymaps/keymap_default.c @@ -2,7 +2,9 @@ // this is the style you want to emulate. #include "planck.h" -#include "backlight.h" +#ifdef BACKLIGHT_ENABLE + #include "backlight.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. @@ -58,7 +60,9 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) case 0: if (record->event.pressed) { register_code(KC_RSFT); - backlight_step(); + #ifdef BACKLIGHT_ENABLE + backlight_step(); + #endif } else { unregister_code(KC_RSFT); } diff --git a/keyboard/planck/keymaps/keymap_lock.c b/keyboard/planck/keymaps/keymap_lock.c index 7a99b57c9d..0deb212cc7 100644 --- a/keyboard/planck/keymaps/keymap_lock.c +++ b/keyboard/planck/keymaps/keymap_lock.c @@ -1,8 +1,10 @@ #include "keymap_common.h" -// #include "backlight.h" +#ifdef BACKLIGHT_ENABLE + #include "backlight.h" +#endif #include "action_layer.h" #include "keymap_midi.h" -#include "beeps.h" +#include "audio.h" #include const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { @@ -86,7 +88,9 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) play_notes(&walk_up, 3, false); // play_note(440, 20); // register_code(KC_RSFT); - // backlight_set(BACKLIGHT_LEVELS); + #ifdef BACKLIGHT_ENABLE + backlight_set(BACKLIGHT_LEVELS); + #endif default_layer_and(0); default_layer_or((1<<5)); @@ -118,17 +122,14 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) // register_code(hextokeycode((lock & 0x0F))); // unregister_code(hextokeycode((lock & 0x0F))); - // note(0+12, 20); - // note(0+24, 20); } else { unregister_code(KC_RSFT); play_notes(&walk_dn, 3, false); - // backlight_set(0); + #ifdef BACKLIGHT_ENABLE + backlight_set(0); + #endif default_layer_and(0); default_layer_or(0); - // note(0+24, 20); - // note(0, 20); - // play_note(4, 20); } break; } @@ -149,44 +150,5 @@ float start_up[][2] = { void * matrix_init_user(void) { init_notes(); - play_notes(&start_up, 9, false); - // play_note(((double)261.6*3)*pow(2.0,(36)/12.0), 0xF); - // _delay_ms(50); - - // play_note(((double)261.6*3)*pow(2.0,(48)/12.0), 0xF); - // _delay_ms(25); - // stop_note(((double)261.6*3)*pow(2.0,(48)/12.0)); - - // play_note(((double)261.6*3)*pow(2.0,(48)/12.0), 0xF); - // _delay_ms(25); - // stop_note(((double)261.6*3)*pow(2.0,(48)/12.0)); - - - // stop_note(((double)261.6*3)*pow(2.0,(36)/12.0)); - - - // play_note(((double)261.6*3)*pow(2.0,(62)/12.0), 0xF); - // _delay_ms(50); - // stop_note(((double)261.6*3)*pow(2.0,(62)/12.0)); - - - // play_note(((double)261.6*3)*pow(2.0,(64)/12.0), 0xF); - // _delay_ms(50); - // stop_note(((double)261.6*3)*pow(2.0,(64)/12.0)); - -} - - -// void * matrix_scan_user(void) { -// if (layer_state & (1<<2)) { -// if (!playing_notes) -// play_notes(&start_up, 9, true); -// } else if (layer_state & (1<<3)) { -// if (!playing_notes) -// play_notes(&start_up, 9, true); -// } else { -// if (playing_notes) -// stop_all_notes(); -// } -// } \ No newline at end of file +} \ No newline at end of file diff --git a/keyboard/planck/planck.h b/keyboard/planck/planck.h index 32c08f3b0b..e775ea7c62 100644 --- a/keyboard/planck/planck.h +++ b/keyboard/planck/planck.h @@ -3,7 +3,9 @@ #include "matrix.h" #include "keymap_common.h" -// #include "backlight.h" +#ifdef BACKLIGHT_ENABLE + #include "backlight.h" +#endif #include #ifdef MIDI_ENABLE #include -- cgit v1.2.3 From a820533ab770e1919f190c102a091c1060f6302e Mon Sep 17 00:00:00 2001 From: Jack Humbert Date: Wed, 20 Jan 2016 00:15:29 -0500 Subject: keymap.c changes, disable grep stuff --- keyboard/planck/Makefile | 10 ++- keyboard/planck/keymaps/default.c | 68 ----------------- keyboard/planck/keymaps/default/README.md | 34 +++++++++ keyboard/planck/keymaps/default/keymap.c | 68 +++++++++++++++++ keyboard/planck/keymaps/jack.c | 50 ------------ keyboard/planck/keymaps/lock.c | 123 ------------------------------ keyboard/planck/keymaps/lock/README.md | 3 + keyboard/planck/keymaps/lock/keymap.c | 123 ++++++++++++++++++++++++++++++ keyboard/planck/keymaps/test/README.md | 3 - keyboard/planck/keymaps/test/default.c | 85 --------------------- 10 files changed, 235 insertions(+), 332 deletions(-) delete mode 100644 keyboard/planck/keymaps/default.c create mode 100644 keyboard/planck/keymaps/default/README.md create mode 100644 keyboard/planck/keymaps/default/keymap.c delete mode 100644 keyboard/planck/keymaps/jack.c delete mode 100644 keyboard/planck/keymaps/lock.c create mode 100644 keyboard/planck/keymaps/lock/README.md create mode 100644 keyboard/planck/keymaps/lock/keymap.c delete mode 100644 keyboard/planck/keymaps/test/README.md delete mode 100644 keyboard/planck/keymaps/test/default.c (limited to 'keyboard') diff --git a/keyboard/planck/Makefile b/keyboard/planck/Makefile index ff68ea0fb3..16d462b699 100644 --- a/keyboard/planck/Makefile +++ b/keyboard/planck/Makefile @@ -53,12 +53,16 @@ TARGET_DIR = . SRC = planck.c \ backlight.c +ifdef keymap + KEYMAP = $(keymap) +endif + ifdef KEYMAP ifneq ("$(wildcard keymaps/$(KEYMAP).c)","") KEYMAP_FILE = keymaps/$(KEYMAP).c else -ifneq ("$(wildcard keymaps/$(KEYMAP)/default.c)","") - KEYMAP_FILE = keymaps/$(KEYMAP)/default.c +ifneq ("$(wildcard keymaps/$(KEYMAP)/keymap.c)","") + KEYMAP_FILE = keymaps/$(KEYMAP)/keymap.c else $(error Keymap file does not exist) endif @@ -67,7 +71,7 @@ else ifneq ("$(wildcard keymaps/default.c)","") KEYMAP_FILE = keymaps/default.c else - KEYMAP_FILE = keymaps/default/default.c + KEYMAP_FILE = keymaps/default/keymap.c endif endif SRC := $(KEYMAP_FILE) $(SRC) diff --git a/keyboard/planck/keymaps/default.c b/keyboard/planck/keymaps/default.c deleted file mode 100644 index 49670dafd3..0000000000 --- a/keyboard/planck/keymaps/default.c +++ /dev/null @@ -1,68 +0,0 @@ -// 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 "backlight.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 _QW 0 -#define _CM 1 -#define _DV 2 -#define _LW 3 -#define _RS 4 - -const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { -[_QW] = { /* 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 }, - {M(0), KC_LCTL, KC_LALT, KC_LGUI, MO(_LW), KC_SPC, KC_SPC, MO(_RS), KC_LEFT, KC_DOWN, KC_UP, KC_RGHT} -}, -[_CM] = { /* 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 }, - {M(0), KC_LCTL, KC_LALT, KC_LGUI, MO(_LW), KC_SPC, KC_SPC, MO(_RS), KC_LEFT, KC_DOWN, KC_UP, KC_RGHT} -}, -[_DV] = { /* 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 }, - {M(0), KC_LCTL, KC_LALT, KC_LGUI, MO(_LW), KC_SPC, KC_SPC, MO(_RS), KC_LEFT, KC_DOWN, KC_UP, KC_RGHT} -}, -[_RS] = { /* 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_TRNS, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS}, - {KC_TRNS, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, DF(_QW), DF(_CM), DF(_DV), RESET, KC_TRNS}, - {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY} -}, -[_LW] = { /* 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_TRNS, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE}, - {KC_TRNS, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, DF(_QW), DF(_CM), DF(_DV), RESET, KC_TRNS}, - {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY} -} -}; - -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); - backlight_step(); - } else { - unregister_code(KC_RSFT); - } - break; - } - return MACRO_NONE; -}; diff --git a/keyboard/planck/keymaps/default/README.md b/keyboard/planck/keymaps/default/README.md new file mode 100644 index 0000000000..d2f43bbdb8 --- /dev/null +++ b/keyboard/planck/keymaps/default/README.md @@ -0,0 +1,34 @@ +# The Default Planck Layout + + const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + [_QW] = { /* 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 }, + {M(0), KC_LCTL, KC_LALT, KC_LGUI, MO(_LW), KC_SPC, KC_SPC, MO(_RS), KC_LEFT, KC_DOWN, KC_UP, KC_RGHT} + }, + [_CM] = { /* 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 }, + {M(0), KC_LCTL, KC_LALT, KC_LGUI, MO(_LW), KC_SPC, KC_SPC, MO(_RS), KC_LEFT, KC_DOWN, KC_UP, KC_RGHT} + }, + [_DV] = { /* 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 }, + {M(0), KC_LCTL, KC_LALT, KC_LGUI, MO(_LW), KC_SPC, KC_SPC, MO(_RS), KC_LEFT, KC_DOWN, KC_UP, KC_RGHT} + }, + [_RS] = { /* 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_TRNS, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS}, + {KC_TRNS, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, DF(_QW), DF(_CM), DF(_DV), RESET, KC_TRNS}, + {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY} + }, + [_LW] = { /* 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_TRNS, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE}, + {KC_TRNS, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, DF(_QW), DF(_CM), DF(_DV), RESET, KC_TRNS}, + {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY} + } + }; \ No newline at end of file diff --git a/keyboard/planck/keymaps/default/keymap.c b/keyboard/planck/keymaps/default/keymap.c new file mode 100644 index 0000000000..49670dafd3 --- /dev/null +++ b/keyboard/planck/keymaps/default/keymap.c @@ -0,0 +1,68 @@ +// 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 "backlight.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 _QW 0 +#define _CM 1 +#define _DV 2 +#define _LW 3 +#define _RS 4 + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { +[_QW] = { /* 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 }, + {M(0), KC_LCTL, KC_LALT, KC_LGUI, MO(_LW), KC_SPC, KC_SPC, MO(_RS), KC_LEFT, KC_DOWN, KC_UP, KC_RGHT} +}, +[_CM] = { /* 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 }, + {M(0), KC_LCTL, KC_LALT, KC_LGUI, MO(_LW), KC_SPC, KC_SPC, MO(_RS), KC_LEFT, KC_DOWN, KC_UP, KC_RGHT} +}, +[_DV] = { /* 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 }, + {M(0), KC_LCTL, KC_LALT, KC_LGUI, MO(_LW), KC_SPC, KC_SPC, MO(_RS), KC_LEFT, KC_DOWN, KC_UP, KC_RGHT} +}, +[_RS] = { /* 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_TRNS, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS}, + {KC_TRNS, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, DF(_QW), DF(_CM), DF(_DV), RESET, KC_TRNS}, + {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY} +}, +[_LW] = { /* 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_TRNS, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE}, + {KC_TRNS, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, DF(_QW), DF(_CM), DF(_DV), RESET, KC_TRNS}, + {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY} +} +}; + +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); + backlight_step(); + } else { + unregister_code(KC_RSFT); + } + break; + } + return MACRO_NONE; +}; diff --git a/keyboard/planck/keymaps/jack.c b/keyboard/planck/keymaps/jack.c deleted file mode 100644 index 0b93bba33f..0000000000 --- a/keyboard/planck/keymaps/jack.c +++ /dev/null @@ -1,50 +0,0 @@ -#include "keymap_common.h" - -const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { -[0] = { /* Jack soft-coded colemak */ - {KC_TAB, CM_Q, CM_W, CM_F, CM_P, CM_G, CM_J, CM_L, CM_U, CM_Y, CM_SCLN, KC_BSPC}, - {KC_ESC, CM_A, CM_R, CM_S, CM_T, CM_D, CM_H, CM_N, CM_E, CM_I, CM_O, KC_QUOT}, - {KC_LSFT, CM_Z, CM_X, CM_C, CM_V, CM_B, CM_K, CM_M, CM_COMM, CM_DOT, CM_SLSH, KC_ENT}, - {BL_STEP, KC_LCTL, KC_LALT, KC_LGUI, FUNC(2), KC_SPC, KC_SPC, FUNC(1), KC_LEFT, KC_DOWN, KC_UP, KC_RGHT} - // Space is repeated to accommadate for both spacebar wiring positions -}, -[1] = { /* Jack hard-coded 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}, - {KC_FN3, KC_LCTL, KC_LALT, KC_LGUI, FUNC(2), KC_SPC, KC_SPC, FUNC(1), KC_LEFT, KC_DOWN, KC_UP, KC_RGHT} -}, -[2] = { /* Jack 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_TRNS, FUNC(3), FUNC(4), LSFT(RSFT(KC_PAUSE)), KC_TRNS, KC_TRNS, KC_TRNS, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS}, - {KC_TRNS, KC_F11, KC_F12, KC_F13, KC_F14, KC_F15, KC_F16, KC_F17, KC_F18, KC_F19, KC_F20, KC_TRNS}, - {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, FUNC(1), KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY} -}, -[3] = { /* Jack LOWER */ - {S(KC_GRV), S(KC_1), S(KC_2), S(KC_3), S(KC_4), S(KC_5), S(KC_6), S(KC_7), S(KC_8), S(KC_9), S(KC_0), KC_BSPC}, - {KC_TRNS, FUNC(3), FUNC(4), LSFT(RSFT(KC_PAUSE)), KC_TRNS, KC_TRNS, KC_TRNS, S(KC_MINS), S(KC_EQL), S(KC_LBRC), S(KC_RBRC), S(KC_BSLS)}, - {KC_TRNS, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_TRNS}, - {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, FUNC(2), KC_TRNS, KC_TRNS, KC_TRNS, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY} -} -}; - - -const uint16_t PROGMEM fn_actions[] = { - [1] = ACTION_LAYER_MOMENTARY(2), // to Fn overlay - [2] = ACTION_LAYER_MOMENTARY(3), // to Fn overlay - - [3] = ACTION_DEFAULT_LAYER_SET(0), - [4] = ACTION_DEFAULT_LAYER_SET(1), - -}; - -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: - return MACRODOWN(T(CM_T), END); - break; - } - return MACRO_NONE; -}; diff --git a/keyboard/planck/keymaps/lock.c b/keyboard/planck/keymaps/lock.c deleted file mode 100644 index bc81adcf97..0000000000 --- a/keyboard/planck/keymaps/lock.c +++ /dev/null @@ -1,123 +0,0 @@ -// USING_MIDI -// USING_BACKLIGHT -#include "keymap_common.h" -#include "backlight.h" -#include "action_layer.h" -#include "keymap_midi.h" -#include - -const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { -[0] = { /* 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}, - {M(0), KC_LCTL, KC_LALT, KC_LGUI, FUNC(2), KC_SPC, KC_SPC, FUNC(1), KC_LEFT, KC_DOWN, KC_UP, KC_RGHT} - // Space is repeated to accommadate for both spacebar wiring positions -}, -[1] = { /* 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}, - {KC_FN3, KC_LCTL, KC_LALT, KC_LGUI, FUNC(2), KC_SPC, KC_SPC, FUNC(1), KC_LEFT, KC_DOWN, KC_UP, KC_RGHT} -}, -[2] = { /* 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_TRNS, FUNC(3), FUNC(4), RESET, KC_TRNS, KC_TRNS, KC_TRNS, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS}, - {KC_TRNS, KC_F11, KC_F12, 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, FUNC(1), KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY} -}, -[3] = { /* LOWER */ - {S(KC_GRV), S(KC_1), S(KC_2), S(KC_3), S(KC_4), S(KC_5), S(KC_6), S(KC_7), S(KC_8), S(KC_9), S(KC_0), KC_BSPC}, - {KC_TRNS, FUNC(3), FUNC(4), RESET, KC_TRNS, KC_TRNS, KC_TRNS, S(KC_MINS), S(KC_EQL), S(KC_LBRC), S(KC_RBRC), S(KC_BSLS)}, - {KC_TRNS, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_TRNS}, - {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, FUNC(2), KC_TRNS, KC_TRNS, KC_TRNS, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY} -}, -[4] = { /* TENKEY */ - {KC_TAB, N_C5, N_D5, N_E5, N_F5, N_G5, N_A5, KC_KP_7, KC_KP_8, KC_KP_9, KC_P, KC_BSPC}, - {KC_ESC, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_KP_4, KC_KP_5, KC_KP_6, KC_SCLN, KC_QUOT}, - {KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_KP_1, KC_KP_2, KC_KP_3, KC_SLSH, KC_ENT}, - {KC_TRNS, KC_LCTL, KC_LALT, KC_LGUI, KC_TRNS, KC_SPC, KC_SPC, KC_KP_0, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT} -}, -[5] = { - { MIDI12 }, - { MIDI12 }, - { MIDI12 }, - {M(0), KC_MS_L, KC_MS_D, KC_MS_U, KC_MS_R, KC_SPC, KC_SPC, FUNC(1), MIDI, MIDI, MIDI, MIDI} -} -}; - -const uint16_t PROGMEM fn_actions[] = { - [1] = ACTION_LAYER_MOMENTARY(2), // to RAISE - [2] = ACTION_LAYER_MOMENTARY(3), // to LOWER - - [3] = ACTION_DEFAULT_LAYER_SET(0), - [4] = ACTION_DEFAULT_LAYER_SET(1), - -}; - -uint16_t hextokeycode(int hex) { - if (hex == 0x0) { - return KC_0; - } else if (hex < 0xA) { - return KC_1 + (hex - 0x1); - } else { - return KC_A + (hex - 0xA); - } -} - -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) { - // play_note(440, 20); - // register_code(KC_RSFT); - backlight_set(BACKLIGHT_LEVELS); - default_layer_and(0); - default_layer_or((1<<5)); - - // uint8_t low = boot_lock_fuse_bits_get(0x0000); - // uint8_t high = boot_lock_fuse_bits_get(0x0003); - // uint8_t ext = boot_lock_fuse_bits_get(0x0002); - // uint8_t lock = boot_lock_fuse_bits_get(0x0001); - - // register_code(hextokeycode((low & 0xF0) >> 4)); - // unregister_code(hextokeycode((low & 0xF0) >> 4)); - // register_code(hextokeycode((low & 0x0F))); - // unregister_code(hextokeycode((low & 0x0F))); - - - // register_code(hextokeycode((high & 0xF0) >> 4)); - // unregister_code(hextokeycode((high & 0xF0) >> 4)); - // register_code(hextokeycode((high & 0x0F))); - // unregister_code(hextokeycode((high & 0x0F))); - - - // register_code(hextokeycode((ext & 0xF0) >> 4)); - // unregister_code(hextokeycode((ext & 0xF0) >> 4)); - // register_code(hextokeycode((ext & 0x0F))); - // unregister_code(hextokeycode((ext & 0x0F))); - - - // register_code(hextokeycode((lock & 0xF0) >> 4)); - // unregister_code(hextokeycode((lock & 0xF0) >> 4)); - // register_code(hextokeycode((lock & 0x0F))); - // unregister_code(hextokeycode((lock & 0x0F))); - - // note(0+12, 20); - // note(0+24, 20); - } else { - // unregister_code(KC_RSFT); - // stop_note(); - backlight_set(0); - default_layer_and(0); - default_layer_or(0); - // note(0+24, 20); - // note(0, 20); - // play_note(4, 20); - } - break; - } - return MACRO_NONE; -}; diff --git a/keyboard/planck/keymaps/lock/README.md b/keyboard/planck/keymaps/lock/README.md new file mode 100644 index 0000000000..d21cb990b0 --- /dev/null +++ b/keyboard/planck/keymaps/lock/README.md @@ -0,0 +1,3 @@ +# Lock layout + +This layout is designed for having a lock switch in the lower-left-hand corner, and for experimenting with MIDI/audio features. It's constantly in development, so don't expect anything to work/be documented correctly! \ No newline at end of file diff --git a/keyboard/planck/keymaps/lock/keymap.c b/keyboard/planck/keymaps/lock/keymap.c new file mode 100644 index 0000000000..bc81adcf97 --- /dev/null +++ b/keyboard/planck/keymaps/lock/keymap.c @@ -0,0 +1,123 @@ +// USING_MIDI +// USING_BACKLIGHT +#include "keymap_common.h" +#include "backlight.h" +#include "action_layer.h" +#include "keymap_midi.h" +#include + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { +[0] = { /* 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}, + {M(0), KC_LCTL, KC_LALT, KC_LGUI, FUNC(2), KC_SPC, KC_SPC, FUNC(1), KC_LEFT, KC_DOWN, KC_UP, KC_RGHT} + // Space is repeated to accommadate for both spacebar wiring positions +}, +[1] = { /* 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}, + {KC_FN3, KC_LCTL, KC_LALT, KC_LGUI, FUNC(2), KC_SPC, KC_SPC, FUNC(1), KC_LEFT, KC_DOWN, KC_UP, KC_RGHT} +}, +[2] = { /* 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_TRNS, FUNC(3), FUNC(4), RESET, KC_TRNS, KC_TRNS, KC_TRNS, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS}, + {KC_TRNS, KC_F11, KC_F12, 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, FUNC(1), KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY} +}, +[3] = { /* LOWER */ + {S(KC_GRV), S(KC_1), S(KC_2), S(KC_3), S(KC_4), S(KC_5), S(KC_6), S(KC_7), S(KC_8), S(KC_9), S(KC_0), KC_BSPC}, + {KC_TRNS, FUNC(3), FUNC(4), RESET, KC_TRNS, KC_TRNS, KC_TRNS, S(KC_MINS), S(KC_EQL), S(KC_LBRC), S(KC_RBRC), S(KC_BSLS)}, + {KC_TRNS, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_TRNS}, + {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, FUNC(2), KC_TRNS, KC_TRNS, KC_TRNS, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY} +}, +[4] = { /* TENKEY */ + {KC_TAB, N_C5, N_D5, N_E5, N_F5, N_G5, N_A5, KC_KP_7, KC_KP_8, KC_KP_9, KC_P, KC_BSPC}, + {KC_ESC, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_KP_4, KC_KP_5, KC_KP_6, KC_SCLN, KC_QUOT}, + {KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_KP_1, KC_KP_2, KC_KP_3, KC_SLSH, KC_ENT}, + {KC_TRNS, KC_LCTL, KC_LALT, KC_LGUI, KC_TRNS, KC_SPC, KC_SPC, KC_KP_0, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT} +}, +[5] = { + { MIDI12 }, + { MIDI12 }, + { MIDI12 }, + {M(0), KC_MS_L, KC_MS_D, KC_MS_U, KC_MS_R, KC_SPC, KC_SPC, FUNC(1), MIDI, MIDI, MIDI, MIDI} +} +}; + +const uint16_t PROGMEM fn_actions[] = { + [1] = ACTION_LAYER_MOMENTARY(2), // to RAISE + [2] = ACTION_LAYER_MOMENTARY(3), // to LOWER + + [3] = ACTION_DEFAULT_LAYER_SET(0), + [4] = ACTION_DEFAULT_LAYER_SET(1), + +}; + +uint16_t hextokeycode(int hex) { + if (hex == 0x0) { + return KC_0; + } else if (hex < 0xA) { + return KC_1 + (hex - 0x1); + } else { + return KC_A + (hex - 0xA); + } +} + +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) { + // play_note(440, 20); + // register_code(KC_RSFT); + backlight_set(BACKLIGHT_LEVELS); + default_layer_and(0); + default_layer_or((1<<5)); + + // uint8_t low = boot_lock_fuse_bits_get(0x0000); + // uint8_t high = boot_lock_fuse_bits_get(0x0003); + // uint8_t ext = boot_lock_fuse_bits_get(0x0002); + // uint8_t lock = boot_lock_fuse_bits_get(0x0001); + + // register_code(hextokeycode((low & 0xF0) >> 4)); + // unregister_code(hextokeycode((low & 0xF0) >> 4)); + // register_code(hextokeycode((low & 0x0F))); + // unregister_code(hextokeycode((low & 0x0F))); + + + // register_code(hextokeycode((high & 0xF0) >> 4)); + // unregister_code(hextokeycode((high & 0xF0) >> 4)); + // register_code(hextokeycode((high & 0x0F))); + // unregister_code(hextokeycode((high & 0x0F))); + + + // register_code(hextokeycode((ext & 0xF0) >> 4)); + // unregister_code(hextokeycode((ext & 0xF0) >> 4)); + // register_code(hextokeycode((ext & 0x0F))); + // unregister_code(hextokeycode((ext & 0x0F))); + + + // register_code(hextokeycode((lock & 0xF0) >> 4)); + // unregister_code(hextokeycode((lock & 0xF0) >> 4)); + // register_code(hextokeycode((lock & 0x0F))); + // unregister_code(hextokeycode((lock & 0x0F))); + + // note(0+12, 20); + // note(0+24, 20); + } else { + // unregister_code(KC_RSFT); + // stop_note(); + backlight_set(0); + default_layer_and(0); + default_layer_or(0); + // note(0+24, 20); + // note(0, 20); + // play_note(4, 20); + } + break; + } + return MACRO_NONE; +}; diff --git a/keyboard/planck/keymaps/test/README.md b/keyboard/planck/keymaps/test/README.md deleted file mode 100644 index c555d2ddc9..0000000000 --- a/keyboard/planck/keymaps/test/README.md +++ /dev/null @@ -1,3 +0,0 @@ -# Testing out this! - -This folder will probably get deleted before merging. \ No newline at end of file diff --git a/keyboard/planck/keymaps/test/default.c b/keyboard/planck/keymaps/test/default.c deleted file mode 100644 index 71bd6c91e5..0000000000 --- a/keyboard/planck/keymaps/test/default.c +++ /dev/null @@ -1,85 +0,0 @@ -// USING_MIDI -// USING_BACKLIGHT -#include "keymap_common.h" -#include "backlight.h" -#include "action_layer.h" -#include "keymap_midi.h" -#include - -const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { -[0] = { /* 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}, - {M(0), KC_LCTL, KC_LALT, KC_LGUI, FUNC(2), KC_SPC, KC_SPC, FUNC(1), KC_LEFT, KC_DOWN, KC_UP, KC_RGHT} - // Space is repeated to accommadate for both spacebar wiring positions -}, -[1] = { /* 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}, - {KC_FN3, KC_LCTL, KC_LALT, KC_LGUI, FUNC(2), KC_SPC, KC_SPC, FUNC(1), KC_LEFT, KC_DOWN, KC_UP, KC_RGHT} -}, -[2] = { /* 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_TRNS, FUNC(3), FUNC(4), RESET, KC_TRNS, KC_TRNS, KC_TRNS, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS}, - {KC_TRNS, KC_F11, KC_F12, 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, FUNC(1), KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY} -}, -[3] = { /* LOWER */ - {S(KC_GRV), S(KC_1), S(KC_2), S(KC_3), S(KC_4), S(KC_5), S(KC_6), S(KC_7), S(KC_8), S(KC_9), S(KC_0), KC_BSPC}, - {KC_TRNS, FUNC(3), FUNC(4), RESET, KC_TRNS, KC_TRNS, KC_TRNS, S(KC_MINS), S(KC_EQL), S(KC_LBRC), S(KC_RBRC), S(KC_BSLS)}, - {KC_TRNS, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_TRNS}, - {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, FUNC(2), KC_TRNS, KC_TRNS, KC_TRNS, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY} -}, -[4] = { /* TENKEY */ - {KC_TAB, N_C5, N_D5, N_E5, N_F5, N_G5, N_A5, KC_KP_7, KC_KP_8, KC_KP_9, KC_P, KC_BSPC}, - {KC_ESC, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_KP_4, KC_KP_5, KC_KP_6, KC_SCLN, KC_QUOT}, - {KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_KP_1, KC_KP_2, KC_KP_3, KC_SLSH, KC_ENT}, - {KC_TRNS, KC_LCTL, KC_LALT, KC_LGUI, KC_TRNS, KC_SPC, KC_SPC, KC_KP_0, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT} -}, -[5] = { - { MIDI12 }, - { MIDI12 }, - { MIDI12 }, - {M(0), KC_MS_L, KC_MS_D, KC_MS_U, KC_MS_R, KC_SPC, KC_SPC, FUNC(1), MIDI, MIDI, MIDI, MIDI} -} -}; - -const uint16_t PROGMEM fn_actions[] = { - [1] = ACTION_LAYER_MOMENTARY(2), // to RAISE - [2] = ACTION_LAYER_MOMENTARY(3), // to LOWER - - [3] = ACTION_DEFAULT_LAYER_SET(0), - [4] = ACTION_DEFAULT_LAYER_SET(1), - -}; - -uint16_t hextokeycode(int hex) { - if (hex == 0x0) { - return KC_0; - } else if (hex < 0xA) { - return KC_1 + (hex - 0x1); - } else { - return KC_A + (hex - 0xA); - } -} - -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) { - backlight_set(BACKLIGHT_LEVELS); - default_layer_and(0); - default_layer_or((1<<5)); - } else { - backlight_set(0); - default_layer_and(0); - default_layer_or(0); - } - break; - } - return MACRO_NONE; -}; -- cgit v1.2.3 From fa53ad5136cce6416a15d7b325ff2adc24d7a788 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Stephan=20Bo=CC=88sebeck?= Date: Thu, 21 Jan 2016 09:13:44 +0100 Subject: swapping modeswitch and Acut-Chars on thumb block --- keyboard/ergodox_ez/keymaps/keymap_osx_de.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'keyboard') diff --git a/keyboard/ergodox_ez/keymaps/keymap_osx_de.c b/keyboard/ergodox_ez/keymaps/keymap_osx_de.c index cc9076eec8..0b3276d5c3 100644 --- a/keyboard/ergodox_ez/keymaps/keymap_osx_de.c +++ b/keyboard/ergodox_ez/keymaps/keymap_osx_de.c @@ -44,7 +44,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { TG(3), DE_A, DE_S, DE_D, DE_F, DE_G, KC_LSFT, CTL_T(DE_Y), DE_X, DE_C, DE_V, DE_B, KC_LALT, LT(SYMB,KC_GRV), DE_LESS, LALT(KC_LSFT), KC_LEFT,KC_RGHT, - TG(2), M(M_MEH_SH_ACUT), //MEH_T(LSFT(DE_ACUT)), //need to create macro for that + M(M_MEH_SH_ACUT), TG(2), KC_HOME, KC_BSPC,KC_DEL, KC_END, // right hand @@ -53,7 +53,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { DE_H, DE_J, DE_K, DE_L, DE_OE,LT(MDIA,DE_AE), KC_RALT, DE_N, DE_M, DE_COMM,DE_DOT, CTL_T(DE_MINS), KC_RSFT, KC_UP, KC_DOWN,LGUI(KC_LSFT),DE_PLUS, LT(SYMB,DE_HASH), - ALL_T(DE_ACUT), TG(4), + TG(4), ALL_T(DE_ACUT), KC_PGUP, KC_PGDN,KC_ENT, KC_SPC ), -- cgit v1.2.3 From ce9086c5077861ead7229ed326ed1c93d842e90a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Stephan=20Bo=CC=88sebeck?= Date: Thu, 21 Jan 2016 09:37:58 +0100 Subject: replaced qwertz with adnw-koy as default --- .../ergodox_ez/keymaps/keymap_osx_de_adnw_koy.c | 124 +++++++++++---------- 1 file changed, 63 insertions(+), 61 deletions(-) (limited to 'keyboard') diff --git a/keyboard/ergodox_ez/keymaps/keymap_osx_de_adnw_koy.c b/keyboard/ergodox_ez/keymaps/keymap_osx_de_adnw_koy.c index 7e9defafa7..f3484a17aa 100644 --- a/keyboard/ergodox_ez/keymaps/keymap_osx_de_adnw_koy.c +++ b/keyboard/ergodox_ez/keymaps/keymap_osx_de_adnw_koy.c @@ -38,26 +38,48 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { */ // If it accepts an argument (i.e, is a function), it doesn't need KC_. // Otherwise, it needs KC_* -[BASE] = KEYMAP( // layer 0 : default - // left hand - KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, LGUI(KC_V), - KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_LGUI, - TG(3), KC_A, KC_S, KC_D, KC_F, KC_G, - KC_LSFT, CTL_T(KC_Z), KC_X, KC_C, KC_V, KC_B, KC_LALT, - LT(SYMB,KC_GRV), DE_LESS, LALT(KC_LSFT), KC_LEFT,KC_RGHT, - TG(2), MEH_T(LSFT(DE_ACUT)), - KC_HOME, - KC_BSPC,KC_DEL,KC_END, - // right hand - LGUI(KC_C), KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, - KC_RGUI, KC_Y, KC_U, KC_I, KC_O, KC_P, DE_UE, - KC_H, KC_J, KC_K, KC_L, KC_SCLN,LT(MDIA,DE_AE), - KC_RALT,KC_N, KC_M, KC_COMM,KC_DOT, CTL_T(KC_SLSH), KC_RSFT, - KC_UP, KC_DOWN,LGUI(KC_LSFT),KC_RBRC, LT(SYMB,KC_BSLS), - ALL_T(DE_ACUT), TG(4), - KC_PGUP, - KC_PGDN,KC_ENT, KC_SPC - ), + +/* Keymap 0: ADNW-Koy layer + * ADNW-Koy is a special layout designed to be ergonomic. Was created using software to determine the most ergonomic way to type German and English texts. + * + * ,--------------------------------------------------. ,--------------------------------------------------. + * | ESC | 1 | 2 | 3 | 4 | 5 |Lctrl | |Rctrl | 6 | 7 | 8 | 9 | 0 | - | + * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| + * | TAB | K | . | O | , | Y | CMD | | CMD | V | G | C | L | ß | Z | + * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + * | ADNW | H | A | E | I | U |------| |------| D | T | R | N | S | F/L2 | + * |--------+------+------+------+------+------| LALT | | RALT |------+------+------+------+------+--------| + * | LShift |X/Ctrl| Q | Ä | Ü | Ö | | | | B | P | W | M |J/Ctrl| RShift | + * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' + * | Date: Thu, 21 Jan 2016 09:50:06 +0100 Subject: added koy layer to default, but disabled it --- keyboard/ergodox_ez/keymaps/keymap_osx_de.c | 68 ++++++++++++++-------- .../ergodox_ez/keymaps/keymap_osx_de_adnw_koy.c | 42 ++++++------- 2 files changed, 66 insertions(+), 44 deletions(-) (limited to 'keyboard') diff --git a/keyboard/ergodox_ez/keymaps/keymap_osx_de.c b/keyboard/ergodox_ez/keymaps/keymap_osx_de.c index 0b3276d5c3..137406bf7e 100644 --- a/keyboard/ergodox_ez/keymaps/keymap_osx_de.c +++ b/keyboard/ergodox_ez/keymaps/keymap_osx_de.c @@ -41,7 +41,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { // left hand KC_ESC, DE_1, DE_2, DE_3, DE_4, DE_5, M(M_CTRL_CMDV), KC_TAB, DE_Q, DE_W, DE_E, DE_R, DE_T, KC_LGUI, - TG(3), DE_A, DE_S, DE_D, DE_F, DE_G, + KC_LALT, DE_A, DE_S, DE_D, DE_F, DE_G, KC_LSFT, CTL_T(DE_Y), DE_X, DE_C, DE_V, DE_B, KC_LALT, LT(SYMB,KC_GRV), DE_LESS, LALT(KC_LSFT), KC_LEFT,KC_RGHT, M(M_MEH_SH_ACUT), TG(2), @@ -102,15 +102,15 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { /* Keymap 2: Media and mouse keys * * ,--------------------------------------------------. ,--------------------------------------------------. - * | | | | | | | | | | | | | | | Play | + * | | | | | | | | | Mute | | | | | | Play | * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| - * | | | | MsUp | | | | | | | | | | | | + * | | | Lclk | MsUp | Rclk | WlUp | | | | | | | | | | * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| - * | | |MsLeft|MsDown|MsRght| |------| |------| | | | | | | + * | | |MsLeft|MsDown|MsRght| WlDw |------| |------|VolUp | | | | | | * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| - * | | | | | | | | | | | | Prev | Next | | | + * | | | | | | MClk | | | |VolDn | | Prev | Next | Up | | * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' - * | | | | Lclk | Rclk | |VolUp |VolDn | Mute | | | + * | | | | | | | | | Left | Down | Right | * `----------------------------------' `----------------------------------' * ,-------------. ,-------------. * | | | | | | @@ -123,39 +123,61 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { // MEDIA AND MOUSE KEYMAP( KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, KC_MS_U, KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, KC_MS_L, KC_MS_D, KC_MS_R, KC_TRNS, - KC_TRNS, KC_WH_L, KC_WH_U, KC_WH_D, KC_WH_R, KC_BTN3, KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, KC_BTN1, KC_BTN2, + KC_TRNS, KC_TRNS, KC_BTN1, KC_MS_U, KC_BTN2, KC_WH_U, KC_TRNS, + KC_TRNS, KC_TRNS, KC_MS_L, KC_MS_D, KC_MS_R, KC_WH_D, + KC_TRNS, KC_TRNS, KC_WH_L, KC_WH_D, KC_WH_R, KC_BTN3, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, // right hand - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MPLY, + KC_MUTE, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MPLY, 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_MUTE, KC_MPRV, KC_MNXT, KC_UP, KC_TRNS, - KC_VOLU, KC_VOLD, KC_LEFT, KC_DOWN, KC_RIGHT, + KC_VOLU, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_VOLD, KC_TRNS, KC_MPRV, KC_MNXT, KC_UP, KC_TRNS, + KC_TRNS, KC_TRNS, KC_LEFT, KC_DOWN, KC_RIGHT, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_WBAK ), -// Cursor layer +// ADNW-KOY layer +/* Keymap 3: ADNW-Koy layer + * ADNW-Koy is a special layout designed to be ergonomic. Was created using software to determine the most ergonomic way to type German and English texts. + * + * ,--------------------------------------------------. ,--------------------------------------------------. + * | | | | | | | | | | | | | | | - | + * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| + * | | K | . | O | , | Y | | | | V | G | C | L | ß | Z | + * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + * | | H | A | E | I | U |------| |------| D | T | R | N | S | F/L2 | + * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + * | |X/Ctrl| Q | Ä | Ü | Ö | | | | B | P | W | M |J/Ctrl| RShift | + * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' + * | Date: Fri, 22 Jan 2016 08:18:13 +0100 Subject: changed some places, disabled layer3, in file it's ADNW now --- keyboard/ergodox_ez/keymaps/keymap_osx_de.c | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) (limited to 'keyboard') diff --git a/keyboard/ergodox_ez/keymaps/keymap_osx_de.c b/keyboard/ergodox_ez/keymaps/keymap_osx_de.c index 137406bf7e..69acd9b951 100644 --- a/keyboard/ergodox_ez/keymaps/keymap_osx_de.c +++ b/keyboard/ergodox_ez/keymaps/keymap_osx_de.c @@ -21,7 +21,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| * | TAB | Q | W | E | R | T | CMD | | CMD | Z | U | I | O | P | ü | * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| - * | L3 | A | S | D | F | G |------| |------| H | J | K | L | ö | ä/L2 | + * | LALT | A | S | D | F | G |------| |------| H | J | K | L | ö | ä/RALT| * |--------+------+------+------+------+------| LALT | | RALT |------+------+------+------+------+--------| * | LShift |Y/Ctrl| X | C | V | B | | | | N | M | , | . |-/Ctrl| RShift | * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' @@ -48,11 +48,11 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { KC_HOME, KC_BSPC,KC_DEL, KC_END, // right hand - M(M_CTRL_CMDC), DE_6, DE_7, DE_8, DE_9, DE_0, DE_SS, - KC_RGUI, DE_Z, DE_U, DE_I, DE_O, DE_P, DE_UE, - DE_H, DE_J, DE_K, DE_L, DE_OE,LT(MDIA,DE_AE), - KC_RALT, DE_N, DE_M, DE_COMM,DE_DOT, CTL_T(DE_MINS), KC_RSFT, - KC_UP, KC_DOWN,LGUI(KC_LSFT),DE_PLUS, LT(SYMB,DE_HASH), + M(M_CTRL_CMDC), DE_6, DE_7, DE_8, DE_9, DE_0, DE_SS, + KC_RGUI, DE_Z, DE_U, DE_I, DE_O, DE_P, DE_UE, + DE_H, DE_J, DE_K, DE_L, DE_OE, ALT_T(DE_AE), + KC_RALT, DE_N, DE_M, DE_COMM,DE_DOT, CTL_T(DE_MINS), KC_RSFT, + KC_UP, KC_DOWN,LGUI(KC_LSFT),DE_PLUS, LT(SYMB,DE_HASH), TG(4), ALL_T(DE_ACUT), KC_PGUP, KC_PGDN,KC_ENT, KC_SPC -- cgit v1.2.3 From 9d03f48643f28e7da92aa476b6878af7bb343d74 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Stephan=20Bo=CC=88sebeck?= Date: Fri, 22 Jan 2016 08:22:23 +0100 Subject: reinstalled lost file, updated with some tweaks --- keyboard/ergodox_ez/keymaps/osx_de/keymap.c | 299 ++++++++++++++++++++++++++++ 1 file changed, 299 insertions(+) create mode 100644 keyboard/ergodox_ez/keymaps/osx_de/keymap.c (limited to 'keyboard') diff --git a/keyboard/ergodox_ez/keymaps/osx_de/keymap.c b/keyboard/ergodox_ez/keymaps/osx_de/keymap.c new file mode 100644 index 0000000000..69acd9b951 --- /dev/null +++ b/keyboard/ergodox_ez/keymaps/osx_de/keymap.c @@ -0,0 +1,299 @@ +#include "ergodox_ez.h" +#include "debug.h" +#include "action_layer.h" +#include "keymap_extras/keymap_german_osx.h" + +#define BASE 0 // default layer +#define SYMB 1 // symbols +#define MDIA 2 // media keys +#define CRSR 3 // media keys +#define NUMB 4 // number keys + +#define M_CTRL_CMDV 1 +#define M_CTRL_CMDC 2 +#define M_MEH_SH_ACUT 3 + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { +/* Keymap 0: Basic layer + * + * ,--------------------------------------------------. ,--------------------------------------------------. + * | ESC | 1 | 2 | 3 | 4 | 5 |CMD-V | |CMD-C | 6 | 7 | 8 | 9 | 0 | ß | + * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| + * | TAB | Q | W | E | R | T | CMD | | CMD | Z | U | I | O | P | ü | + * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + * | LALT | A | S | D | F | G |------| |------| H | J | K | L | ö | ä/RALT| + * |--------+------+------+------+------+------| LALT | | RALT |------+------+------+------+------+--------| + * | LShift |Y/Ctrl| X | C | V | B | | | | N | M | , | . |-/Ctrl| RShift | + * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' + * | | ! | ? | | | | | \ | [ | ] | | | # | F12 | + * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + * | | # | $ | \ | / | . |------| |------| / | ( | ) | { | } | | + * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + * | | | ^ | % | | | ~ | | | | & | < | > | " | ' | ? | + * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' + * | | | | | | | | | . | ! | | + * `----------------------------------' `----------------------------------' + * ,-------------. ,-------------. + * | | | | | | + * ,------|------|------| |------+------+------. + * | | | | | | | | + * | | |------| |------| | | + * | | | | | | | | + * `--------------------' `--------------------' + */ +// SYMBOLS +[SYMB] = KEYMAP( + // left hand + KC_TRNS,KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_TRNS, + KC_TRNS,DE_LESS,DE_MORE,DE_EXLM,DE_QST, KC_TRNS,KC_TRNS, + KC_TRNS,DE_HASH,DE_DLR, DE_BSLS,DE_SLSH,KC_DOT, + KC_TRNS,KC_TRNS,DE_LESS,DE_PERC,DE_PIPE,DE_TILD,KC_TRNS, + KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS, + KC_TRNS,KC_TRNS, + KC_TRNS, + KC_TRNS,KC_DEL,KC_TRNS, + // right hand + KC_TRNS, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, + KC_TRNS, LALT(LSFT(KC_7)), LALT(KC_5), LALT(KC_6), LALT(KC_7), DE_HASH, KC_F12, + DE_SLSH, DE_LPRN, DE_RPRN, LALT(KC_8), LALT(KC_9), KC_TRNS, + KC_TRNS, DE_AMPR, KC_GRV, LSFT(KC_GRV), DE_DQOT, DE_QUOT, DE_QST, + KC_TRNS,KC_DOT, KC_EXLM, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, + KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS +), +/* Keymap 2: Media and mouse keys + * + * ,--------------------------------------------------. ,--------------------------------------------------. + * | | | | | | | | | Mute | | | | | | Play | + * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| + * | | | Lclk | MsUp | Rclk | WlUp | | | | | | | | | | + * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + * | | |MsLeft|MsDown|MsRght| WlDw |------| |------|VolUp | | | | | | + * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + * | | | | | | MClk | | | |VolDn | | Prev | Next | Up | | + * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' + * | | | | | | | | | Left | Down | Right | + * `----------------------------------' `----------------------------------' + * ,-------------. ,-------------. + * | | | | | | + * ,------|------|------| |------+------+------. + * | | | | | | |Brwser| + * | | |------| |------| |Back | + * | | | | | | | | + * `--------------------' `--------------------' + */ +// MEDIA AND MOUSE +KEYMAP( + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_BTN1, KC_MS_U, KC_BTN2, KC_WH_U, KC_TRNS, + KC_TRNS, KC_TRNS, KC_MS_L, KC_MS_D, KC_MS_R, KC_WH_D, + KC_TRNS, KC_TRNS, KC_WH_L, KC_WH_D, KC_WH_R, KC_BTN3, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, + KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, + // right hand + KC_MUTE, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MPLY, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_VOLU, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_VOLD, KC_TRNS, KC_MPRV, KC_MNXT, KC_UP, KC_TRNS, + KC_TRNS, KC_TRNS, KC_LEFT, KC_DOWN, KC_RIGHT, + KC_TRNS, KC_TRNS, + KC_TRNS, + KC_TRNS, KC_TRNS, KC_WBAK +), +// ADNW-KOY layer +/* Keymap 3: ADNW-Koy layer + * ADNW-Koy is a special layout designed to be ergonomic. Was created using software to determine the most ergonomic way to type German and English texts. + * + * ,--------------------------------------------------. ,--------------------------------------------------. + * | | | | | | | | | | | | | | | - | + * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| + * | | K | . | O | , | Y | | | | V | G | C | L | ß | Z | + * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + * | | H | A | E | I | U |------| |------| D | T | R | N | S | F/L2 | + * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + * | |X/Ctrl| Q | Ä | Ü | Ö | | | | B | P | W | M |J/Ctrl| RShift | + * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' + * |event.pressed) { + register_code(KC_RSFT); + } else { + unregister_code(KC_RSFT); + } + break; + case 1: + if (record->event.pressed) { + start = timer_read(); + return MACRO(D(LCTRL), END); + } else { + if (timer_elapsed(start) > 150) { + return MACRO(U(LCTRL), END); + } else { + return MACRO(U(LCTRL), D(LGUI), T(V), U(LGUI), END); + } + } + break; + case 2: + if (record->event.pressed) { + start = timer_read(); + return MACRO(D(LCTRL),END); + } else { + if (timer_elapsed(start) > 150){ + return MACRO(U(LCTRL),END); + } else { + return MACRO(U(LCTRL),D(LGUI),T(C),U(LGUI),END); + } + } + break; + case 3: + if (record->event.pressed) { + start = timer_read(); + return MACRO(D(LCTRL),D(LSFT),D(LALT),END); + } else { + if (timer_elapsed(start) > 150){ + return MACRO(U(LCTRL),U(LSFT),U(LALT),END); + } else { + return MACRO(U(LCTRL),U(LALT),T(EQL),U(LSFT),END); //cannot use DE_ACUT here, as macro needs KC_ prefix + } + } + break; + } + return MACRO_NONE; +}; + +// 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; + case 3: + ergodox_right_led_3_on(); + break; + case 4: + ergodox_right_led_1_on(); + ergodox_right_led_3_on(); + //ergodox_board_led_on(); + break; + default: + // none + break; + } + +}; -- cgit v1.2.3 From f95e3e701cac9e40531b2af5b2efaf59a84fb312 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Stephan=20Bo=CC=88sebeck?= Date: Fri, 22 Jan 2016 08:22:59 +0100 Subject: new hex file --- keyboard/ergodox_ez/keymaps/osx_de/osx_de.hex | 44 +++++++++++++-------------- 1 file changed, 22 insertions(+), 22 deletions(-) (limited to 'keyboard') diff --git a/keyboard/ergodox_ez/keymaps/osx_de/osx_de.hex b/keyboard/ergodox_ez/keymaps/osx_de/osx_de.hex index eb82384d54..2c83055b0d 100644 --- a/keyboard/ergodox_ez/keymaps/osx_de/osx_de.hex +++ b/keyboard/ergodox_ez/keymaps/osx_de/osx_de.hex @@ -16,17 +16,17 @@ :1000F000E20001E001E101E20002E001E3010602A9 :100100000602E30002E00001E00002E001E3011961 :10011000021902E30002E00001E0000000F0A1F09B -:10012000A329002B000354E100358100001E0014B8 +:10012000A329002B00E200E100358100001E00142D :100130000004001D7135004D001F001A0016001B41 :1001400000E1044C00200008000700060050002ACF :100150000021001500090019004F004A0022001775 -:10016000000A000500000002540130E3000000E234 -:1001700000000003300230E7000000E60000002E1F -:100180007F23001C000B0011000000045424001801 +:10016000000A000500000003300130E3000000E257 +:1001700000000002540230E7000000E60000000426 +:100180005423001C000B00110000002E7F240018D7 :10019000000D00100052004B0025000C000E003630 :1001A0000051002C00260012000F003700E1082843 :1001B00000270013003300387130004E002D002F4F -:1001C000003482E5003181000001000100010001DE +:1001C000003474E5003181000001000100010001EC :1001D00000010000003A003500310001000100017B :1001E000003B0035022102350001004C003C001E9E :1001F0000224062202010001003D002D02240224F7 @@ -38,26 +38,26 @@ :100250000425041F021E0201004300310026043160 :1002600002010001004400450001002D02010000D0 :100270000001000100010001000100000001000177 -:10028000000100FB000100010001000100F200F983 -:1002900000010001000100F000F100FA00F400018B -:1002A0000001000100F300FC00F500010001000165 -:1002B000000100F600000001000100010000000143 -:1002C0000000000100010001000000010000000129 -:1002D0000001000100010001000000010001000117 -:1002E000000100A800A9000100010001000100AC0C -:1002F00000AA00B600010001000100AB005000019F +:100280000001000100010001000100F400F200FB88 +:1002900000010001000100F000F100FA000100017E +:1002A000000100F500F300FC00010001000100F96D +:1002B00000FA00F60000000100010001000000014A +:1002C0000000000100A80001000000010000000182 +:1002D0000001000100A900AA0000000100010001C6 +:1002E000000100010001000100010001000100AC5B +:1002F000000100B600010001000100AB0050000148 :1003000000010001000100520051000100AE000197 :1003100000010001004F0000000100010001000188 -:1003200000010000000100010001000100010001C6 -:1003300000010001000100010001000100010001B5 -:1003400000010001000100010001000100010001A5 -:100350000001000100010001000100010000000196 +:10032000000100000001000E000B001B7101000124 +:100330000001003700040014000100010001001258 +:10034000000800340001000100010036000C002FFD +:10035000000100010001001D001800330000000131 :100360000001000100000001000000010001000187 -:100370000000000100000001000100010001000177 -:100380000000000100010001000100010001000166 -:100390000001000100010001000100010001000155 -:1003A00000010001005000010001000100010052A5 -:1003B000005100010001000100010001004F000098 +:100370000000000100000001000100190007000555 +:10038000000000010001000A001700130001000135 +:10039000000100060015001A000100010001000F15 +:1003A00000110010000100010001002D0016000DD9 +:1003B000710100010038001C0009820100010000E9 :1003C0000001000100010001000100000001000126 :1003D00000010001000100010001000100500001C6 :1003E0000001000100010052005100010001000164 -- cgit v1.2.3 From caf82bcacef6dc5eacfd8c7fccff304bdb38595b Mon Sep 17 00:00:00 2001 From: Evan Pitstick Date: Fri, 22 Jan 2016 07:33:56 -0500 Subject: Single tap enable ACTION_LAYER_TAP_TOGGLE layer --- keyboard/ergodox_ez/config.h | 2 ++ 1 file changed, 2 insertions(+) (limited to 'keyboard') diff --git a/keyboard/ergodox_ez/config.h b/keyboard/ergodox_ez/config.h index 825997ba05..6a391ffb54 100644 --- a/keyboard/ergodox_ez/config.h +++ b/keyboard/ergodox_ez/config.h @@ -38,6 +38,8 @@ along with this program. If not, see . #define MOUSEKEY_MAX_SPEED 3 #define MOUSEKEY_TIME_TO_MAX 10 +#define TAPPING_TOGGLE 1 + #define COLS (int []){ F1, F0, B0, C7, F4, F5, F6, F7, D4, D6, B4, D7 } #define ROWS (int []){ D0, D5, B5, B6 } -- cgit v1.2.3 From 51fec6647a288862244a50b616255d84564db02d Mon Sep 17 00:00:00 2001 From: Olivier Lechevalier Date: Sat, 23 Jan 2016 14:07:13 +0900 Subject: Add colemak keymap to Ergodox EZ. --- keyboard/ergodox_ez/keymaps/colemak/colemak.hex | 1471 +++++++++++++++++++++++ keyboard/ergodox_ez/keymaps/colemak/keymap.c | 184 +++ keyboard/ergodox_ez/keymaps/colemak/readme.md | 4 + 3 files changed, 1659 insertions(+) create mode 100644 keyboard/ergodox_ez/keymaps/colemak/colemak.hex create mode 100644 keyboard/ergodox_ez/keymaps/colemak/keymap.c create mode 100644 keyboard/ergodox_ez/keymaps/colemak/readme.md (limited to 'keyboard') diff --git a/keyboard/ergodox_ez/keymaps/colemak/colemak.hex b/keyboard/ergodox_ez/keymaps/colemak/colemak.hex new file mode 100644 index 0000000000..cd3bf781af --- /dev/null +++ b/keyboard/ergodox_ez/keymaps/colemak/colemak.hex @@ -0,0 +1,1471 @@ +:100000000C9400070C9444070C9444070C94440788 +:100010000C9444070C9444070C9444070C94440734 +:100020000C9444070C9444070C9458120C942A1313 +:100030000C9444070C9444070C9444070C94440714 +:100040000C9444070C94002C0C9444070C94440723 +:100050000C9444070C94F8210C9444070C94440726 +:100060000C9444070C9444070C9444070C944407E4 +:100070000C9444070C9444070C9444070C944407D4 +:100080000C9444070C9444070C9444070C944407C4 +:100090000C9444070C9444070C9444070C944407B4 +:1000A0000C9444070C9444070C9444079713B91319 +:1000B000A714B913A714FE132114A71476148914D6 +:1000C000D017D017FF17FF1742188018991A991ADE +:1000D0009918991A9A199A196D1A991A991A841ACB +:1000E0000000F0A12E004C002A00E1003581000044 +:1000F0001E00140004001D7134004D001F001A0082 +:1001000015001B00E1042A0020000900160006006B +:1001100050002C0021001300170019004F004A0066 +:1001200022000A0007000500000065745000015419 +:100130000000007F0000E3004F0001540000007742 +:100140000000E20023000D000B000E0000002971EA +:1001500024000F001100100052004B002500180071 +:10016000080036005100280026001C000C00370053 +:100170002F002B00270033001282387130004E0010 +:100180002D0031003400E500C10000000100010035 +:1001900001000100010000003A001E0220022202BC +:1001A000010001003B001F022102230201000100A7 +:1001B0003C002F0226022F00010001003D0030020A +:1001C00027023000010001003E00310235003502F7 +:1001D000000001000100010000000100000001001A +:1001E0000100010000000100000001003F0052007A +:1001F00051002402000001004000240021001E00E4 +:10020000010001004100250022001F00370001000D +:1002100042002600230020002700010043002502A1 +:100220002E0231002E0001004400450001000100B3 +:1002300001000000010001000100010001000000B8 +:1002400001000100010001000100010001000100A6 +:10025000F2000100010001000100F000F1000100C6 +:10026000F400010001000100F3000100F5000100AD +:100270000100010001000100000001000100010077 +:100280000000010000000100010001000000010069 +:100290000000010001000100010001000000010058 +:1002A0000100010001000100A9000100010001009E +:1002B0000100AC00AA00B600010001000100AB0083 +:1002C000A80001000100010001000100010001007F +:1002D00001000100AE000100010000000A0025300D +:1002E000313662003A200025303258000A722F63FE +:1002F0002030313233343536373839414243444582 +:10030000460A000A002530325800626F756E636538 +:10031000213A20006C6566742073696465206174FD +:100320007461636865640A006C656674207369644F +:1003300065206E6F7420726573706F6E64696E678E +:100340000A00747279696E6720746F207265736534 +:1003500074206D637032333031380A000A444542EC +:1003600055473A20656E61626C65642E0A005B73C6 +:100370005D004B6579626F617264207374617274A1 +:100380002E0A005B575D005B535D005B525D005BB6 +:10039000445D005B435D0016034500720067006F1B +:1003A0000044006F007800200045005A000000164D +:1003B000034500720067006F0044006F0078002062 +:1003C0000045005A0000000403090409028D0005DD +:1003D0000100A0FA09040000010301010009211134 +:1003E000010001223F000705810308000A090401FA +:1003F000000103010200092111010001224D000743 +:1004000005820308000A0904020001030000000934 +:1004100021110100012236000705830308000A09A3 +:100420000403000203000000092111010001222041 +:1004300000070584032000010705040320000109CB +:100440000404000103000000092111010001223908 +:1004500000070585031000011201100100000008CB +:10046000EDFE071301000102000105010906A101CB +:10047000050719E029E71500250195087501810296 +:100480000508190129059505750191029501750366 +:100490009101050719002977150025019578750147 +:1004A0008102C00631FF0974A1010975150025FFFD +:1004B0009520750881020976150025FF952075089D +:1004C0009102C005010980A101850216010026B72D +:1004D000001A01002AB700751095018100C0050CB3 +:1004E0000901A1018503160100269C021A01002AB8 +:1004F0009C02751095018100C005010902A1010946 +:1005000001A10005091901290515002501950575A9 +:100510000181029501750381010501093009311539 +:1005200081257F95027508810609381581257F95FB +:100530000175088106050C0A38021581257F950191 +:1005400075088106C0C005010906A101050719E06B +:1005500029E71500250195087501810295017508A7 +:10056000810105081901290595057501910295017B +:10057000750391010507190029FF150025FF950650 +:1005800075088100C00A002530325820006B65795B +:10059000626F6172645F7265706F72743A20000AF4 +:1005A0000025303258006B6579626F6172645F7349 +:1005B00065745F6C65643A200064656C5F6B657997 +:1005C0005F6269743A2063616E27742064656C3AD7 +:1005D00020253032580A006164645F6B65795F6280 +:1005E00069743A2063616E2774206164643A20253F +:1005F0003032580A00646F6E652E0A00626F6F67B2 +:100600006D61676963207363616E3A202E2E2E2020 +:1006100000290A002575002F002575005D2800259A +:10062000640020002564002000256400200025646B +:10063000007C0025303258006D6F7573656B6579ED +:10064000205B62746E7C782079207620685D287249 +:1006500065702F61636C293A205B006D6B5F776872 +:1006600065656C5F74696D655F746F5F6D6178203F +:100670003D2025640A006D6B5F776865656C5F6D72 +:1006800061785F7370656564203D2025640A006DA4 +:100690006B5F74696D655F746F5F6D6178203D207D +:1006A00025640A006D6B5F6D61785F7370656564CA +:1006B000203D2025640A006D6B5F696E746572765B +:1006C000616C203D2025640A006D6B5F64656C6180 +:1006D00079203D2025640A006D6B5F776865656C45 +:1006E0005F74696D655F746F5F6D6178203D202573 +:1006F000640A006D6B5F776865656C5F6D61785F3C +:100700007370656564203D2025640A006D6B5F741D +:10071000696D655F746F5F6D6178203D2025640AA7 +:10072000006D6B5F6D61785F7370656564203D205F +:1007300025640A006D6B5F696E74657276616C206A +:100740003D2025640A006D6B5F64656C6179203D16 +:100750002025640A000A00257500363A207768656E +:10076000656C5F74696D655F746F5F6D61783A2069 +:10077000000A00257500353A20776865656C5F6D65 +:1007800061785F73706565643A20000A0025750022 +:10079000343A2074696D655F746F5F6D61783A20DB +:1007A000000A00257500333A206D61785F7370652B +:1007B00065643A20000A00257500323A20696E749B +:1007C000657276616C286D73293A20000A002575E0 +:1007D00000313A2064656C6179282A31306D7329C3 +:1007E0003A20000A092D2056616C756573202D0A88 +:1007F000004D3E004D25643E20003F00736574208F +:1008000064656661756C740A00433E200077686514 +:1008100072652064656C74613A20637572736F72DF +:100820003D25642C20776865656C3D25640A536519 +:100830006520687474703A2F2F656E2E77696B6926 +:1008400070656469612E6F72672F77696B692F4DD0 +:100850006F7573655F6B6579730A000A092D204D0A +:100860006F7573656B6579202D0A4553432F713A77 +:1008700009717569740A313A0964656C6179282ACD +:1008800031306D73290A323A09696E746572766186 +:100890006C286D73290A333A096D61785F7370654E +:1008A00065640A343A0974696D655F746F5F6D61E0 +:1008B000780A353A09776865656C5F6D61785F73B2 +:1008C000706565640A363A09776865656C5F7469B6 +:1008D0006D655F746F5F6D61780A0A703A097072B6 +:1008E000696E742076616C7565730A643A09736584 +:1008F000742064656661756C74730A75703A092BAF +:10090000310A646F776E3A092D310A706775703A53 +:10091000092B31300A7067646F776E3A092D3130D8 +:100920000A0A7370656564203D2064656C746120FB +:100930002A206D61785F7370656564202A202872B3 +:100940006570656174202F2074696D655F746F5FD9 +:100950006D6178290A003F004D3E2000433E200093 +:100960004C25640A000A092D20436F6E736F6C6575 +:10097000202D0A4553432F713A09717569740A6D28 +:100980003A096D6F7573656B65790A000A092D2048 +:100990004D61676963202D0A643A09646562756771 +:1009A0000A783A096465627567206D6174726978C6 +:1009B0000A6B3A096465627567206B6579626F61DD +:1009C00072640A6D3A096465627567206D6F7573AC +:1009D000650A763A0976657273696F6E0A733A0929 +:1009E0007374617475730A633A09636F6E736F6C25 +:1009F00065206D6F64650A302D343A096C61796544 +:100A000072302D34284631302D4634290A50617514 +:100A1000733A09626F6F746C6F616465720A653A4C +:100A200009656570726F6D0A6E3A094E4B524F0A36 +:100A30007A3A09736C656570204C4544207465737F +:100A4000740A000A002575002E6E6B726F3A200042 +:100A50000A002575002E737761705F6261636B73A6 +:100A60006C6173685F6261636B73706163653A2088 +:100A7000000A002575002E737761705F67726176DA +:100A8000655F6573633A20000A002575002E6E6F5E +:100A90005F6775693A20000A002575002E7377613B +:100AA000705F72616C745F726775693A20000A004A +:100AB0002575002E737761705F6C616C745F6C6775 +:100AC00075693A20000A002575002E636170736C09 +:100AD0006F636B5F746F5F636F6E74726F6C3A20DD +:100AE000000A002575002E737761705F636F6E7466 +:100AF000726F6C5F636170736C6F636B3A20000A96 +:100B00000025303258006B65796D61705F636F6EE0 +:100B10006669672E7261773A20000A002575002EFB +:100B20006D6F7573653A20000A002575002E6B65A0 +:100B300079626F6172643A20000A002575002E6D9B +:100B400061747269783A20000A002575002E656E7E +:100B500061626C653A20000A0025303258006465F5 +:100B60006275675F636F6E6669672E7261773A20A0 +:100B7000000A0025750064656661756C745F6C61C0 +:100B80007965723A20003F004E4B524F3A206F6613 +:100B9000660A004E4B524F3A206F6E0A0074696D20 +:100BA00065725F636F756E743A202530346C580A35 +:100BB000006B6579626F6172645F6E6B726F3A2071 +:100BC00025580A006B6579626F6172645F69646CB5 +:100BD000653A2025580A006B6579626F6172645F1F +:100BE00070726F746F636F6C3A2025580A00686FDB +:100BF00073745F6B6579626F6172645F6C65647357 +:100C000028293A2025580A000A092D2053746174B6 +:100C10007573202D0A004743433A20342E392E3273 +:100C2000204156522D4C4942433A20312E382E3124 +:100C3000204156525F415243483A20617672350A4C +:100C4000004F5054494F4E533A204C554641204294 +:100C50004F4F544D41474943204D4F5553454B4508 +:100C6000592045585452414B455920434F4E534FFC +:100C70004C4520434F4D4D414E44204E4B524F204A +:100C80003531320A004255494C443A2061313864CA +:100C9000636330202831343A30353A3534204A61A4 +:100CA0006E2032332032303136290A005649443A18 +:100CB00020307846454544284572676F446F782058 +:100CC000455A29205049443A20307831333037286A +:100CD0004572676F446F7820455A29205645523A2D +:100CE000203078303030310A00444553433A207484 +:100CF0002E6D2E6B2E206B6579626F61726420669B +:100D000069726D7761726520666F72204572676FD8 +:100D1000646F780A000A092D2056657273696F6E38 +:100D2000202D0A000A6D6F7573653A206F66660A9A +:100D3000000A6D6F7573653A206F6E0A000A6B6565 +:100D400079626F6172643A206F66660A000A6B65A9 +:100D500079626F6172643A206F6E0A000A6D617485 +:100D60007269783A206F66660A000A6D617472696A +:100D7000783A206F6E0A000A64656275673A206FE0 +:100D80006E0A000A64656275673A206F66660A003B +:100D90000A0A626F6F746C6F616465722E2E2E206A +:100DA00000433E20006565636F6E6669673A0A001E +:100DB000536C656570204C454420746573740A005B +:100DC0000000000000000000000000010204060A0C +:100DD0000F17202C3A4A5D71879DB3C7DAE9F5FCFD +:100DE000FFFCF5E9DAC7B39D87715D4A3A2C2017FD +:100DF0000F0A0604020100000000000000000000CD +:100E000011241FBECFEFDAE0DEBFCDBF04B603FE74 +:100E100024C08091F9019091FA01A091FB01B09159 +:100E2000FC018730904BA740B04BB9F41092F90108 +:100E30001092FA011092FB011092FC0114BE84B7CB +:100E4000877F84BF88E10FB6F8948093600010928A +:100E500060000FBEE0E0FFE3099511E0A0E0B1E023 +:100E6000ECE9FBE502C005900D92AA33B107D9F772 +:100E700011E0AAE3B1E001C01D92A93FB107E1F77B +:100E80000E94900F0C94CC2D0C940000FF93EF93D4 +:100E9000E0913A01F0913B01309709F00995EF910B +:100EA000FF910895FC018591803011F0EFDFFBCFB9 +:100EB0000895FF27E0E230E247FF0CC0419597FF1D +:100EC00009C0EDE26095709580959095611D711D4A +:100ED000811D911D27FF02C0219530E350E2AA2712 +:100EE000660F771F881F991FAA1FA41710F0A41B55 +:100EF00063955A95A9F7AA3008F0A95FA05DAF9352 +:100F0000F395611571058105910541F7ED3211F4F5 +:100F1000EF93F395F21718F43F93F395FBCF8F916E +:100F2000B5DFFA95E1F70895E991F991859180305F +:100F300021F0853219F0AADFF9CF089520E0E89476 +:100F400055915532C1F3503311F4689455915A3389 +:100F500048F4505390F3220F022E220F220F200D3F +:100F6000250FF4CF0EF4219589919991533619F3F9 +:100F7000533729F1533559F1BC0188279927E89453 +:100F80005C3621F48991999168945591543639F4DD +:100F900046EF7EF077FF0DC08FEF9FEF0AC0553709 +:100FA0004AE039F0583540E121F0523642E009F08C +:100FB0000895FF93EF937DDFEF91FF91B7CFFF93FC +:100FC000EF93FC0181918030B9F360DFFBCFFF9399 +:100FD000EF9368DFF1CFDF93CF93CDB7DEB72596E0 +:100FE000A3DFCF91DF91089561110BC0FC018281D5 +:100FF000882321F085EE0E946D1603C085EE0E94C5 +:10100000351780E090E0089508956091BC017091DB +:10101000BD018091BE019091BF010E94FB205698B6 +:101020005E9825982D9826982E9827982F9881308D +:1010300019F0823021F00895259A2D9A0895269A64 +:101040002E9A089585E098E0892B11F00E940508FA +:1010500080E090E0089556985E9825982D982698FF +:101060002E9827982F988FEF90E090938900809387 +:10107000880090938B0080938A0090938D008093DA +:101080008C00259A2D9A2FEF80E792E02150804026 +:101090009040E1F700C00000269A2E9A2FEF80E7DB +:1010A00092E0215080409040E1F700C00000279A74 +:1010B0002F9A2FEF80E792E0215080409040E1F797 +:1010C00000C0000025982D982FEF80E792E0215076 +:1010D00080409040E1F700C0000026982E982FEF46 +:1010E00080E792E0215080409040E1F700C000008E +:1010F00027982F9856985E9825982D9826982E9880 +:1011000027982F98089589EA8093800089E080933A +:10111000810024982C983F988AB18F748AB96E9870 +:10112000479A8BB1806B8BB9769A0E942B0884E02A +:1011300098E0892B11F00E94040880E090E0089567 +:1011400080E28093000180913C0181110EC00E94D9 +:10115000EF0881E080933C012FEF83ED90E3215075 +:1011600080409040E1F700C0000080E40E94F50854 +:101170008093000181112EC00E941F0980930001FD +:10118000811128C00E941F0980930001811122C093 +:101190008FE30E941F098093000181111BC00E94F0 +:1011A000170980E40E94F50880930001811112C0A4 +:1011B0008CE00E941F098093000181110BC00E94E6 +:1011C0001F0980930001811105C08FE30E941F0950 +:1011D000809300010E9417098091000108951092E8 +:1011E000B9008AE08093B800089594EA9093BC0017 +:1011F0009091BC0097FFFCCF9091B900987F9830F8 +:1012000021F0903111F081E008958093BB0084E8D3 +:101210008093BC008091BC0087FFFCCF8091B90017 +:10122000887F883111F0803471F780E0089584E977 +:101230008093BC008091BC0084FDFCCF0895809316 +:10124000BB0084E88093BC008091BC0087FFFCCF8A +:101250009091B900987F81E0983209F480E0089578 +:1012600084E88093BC008091BC0087FFFCCF809114 +:10127000BB00089580910001811115C080E40E9497 +:10128000F5088093000181110CC082E10E941F09C2 +:1012900080930001811105C08FEF0E941F09809388 +:1012A00000010E94170984B1807F84B985B1807FD5 +:1012B00085B98AB1837F8AB98BB1837F8BB93E9818 +:1012C000469808950E94A008809300010E943A0960 +:1012D00080B38C7080BB81B3836F81BBAEE3B1E020 +:1012E000ECE4F1E08EE08E0F11921D928E13FCCF94 +:1012F00083E898E0892B11F00C94830808959F925D +:10130000AF92BF92CF92DF92EF92FF920F931F9313 +:10131000CF93DF93809100018823E1F080913D011C +:101320008F5F80933D01811115C082E493E00E949C +:1013300052070E94A00880930001882329F088E2C8 +:1013400093E00E94520706C084E193E00E94520796 +:101350000E942B080EE311E0C0E0D0E0BB24B39460 +:1013600082E0A82ECC24C394D12C25E0E22E23E0E9 +:10137000F22EC730D10500F580910001811164C0C3 +:1013800080E40E94F50880930001811112C082E17F +:101390000E941F098093000181110BC0C6010C2E11 +:1013A00001C0880F0A94EAF780950E941F09809374 +:1013B00000010E94170948C0CA30A1F028F4C830C3 +:1013C00059F0C93061F005C0CC3089F070F0CD30F3 +:1013D00089F0209A289810C0219A29980DC0229A45 +:1013E0002A980AC0239A2B9807C0529A01C0539A90 +:1013F0005B9802C03E9A469890EA9A95F1F79FB1A1 +:10140000799902C082E001C080E091709B25982B01 +:101410007C9902C084E001C080E0892B7D9902C0E4 +:1014200038E001C030E0832B7E9902C020E101C08A +:1014300020E0822B9FB19095991F9927991F929533 +:10144000990F907E892B10C080910001811174C08A +:1014500080E40E94F50880930001882309F459C0B4 +:10146000912C0E941709892DF8019081981739F164 +:10147000808380910101882301F18091D70180FF51 +:1014800004C08AE093E00E9452078091D70180FF58 +:101490000CC0809101011F928F93FF92EF920E94E6 +:1014A000EB070F900F900F900F908091D70180FF66 +:1014B00004C083E093E00E945207A09201010E94C1 +:1014C0003A0921960F5F1F4FCE30D10509F051CF59 +:1014D000809101018823B1F081508093010188231C +:1014E00039F08FE99FE00197F1F700C000000AC0D2 +:1014F000ACE4B1E0EEE3F1E0CF01825F91919D9326 +:101500008E13FCCF82E298E0892BC1F00E94220862 +:1015100015C083E10E941F09809300018111A0CFB3 +:1015200081E40E94F50880930001811199CF0E9407 +:101530003009982E909495CF80E096CF81E0DF918E +:10154000CF911F910F91FF90EF90DF90CF90BF90C0 +:10155000AF909F900895E82FF0E0E45BFE4F80810C +:101560000895CF92DF92EF92FF920F931F93CF9344 +:10157000DF938CEE92E00E9452078CE4E82E81E02B +:10158000F82EC0E0D0E097EEC92E92E0D92E0EEDF5 +:1015900012E0DF93CF93DF92CF920E94EB0784EEAD +:1015A00092E00E945207F70181917F0190E00E9432 +:1015B00061219F938F931F930F930E94EB078CEDF4 +:1015C00092E00E94520721968DB79EB708960FB6FB +:1015D000F8949EBF0FBE8DBFCE30D105D1F6DF91FE +:1015E000CF911F910F91FF90EF90DF90CF900895D2 +:1015F0008B3B910578F4883A910540F5853A910541 +:10160000D0F48430910508F0B1C08130910509F41F +:10161000ADC06BC0803E910508F467C0883E91055F +:1016200008F4A4C09C01205F31092031310508F085 +:101630005CC090650895853A910509F459C0863AD1 +:10164000910509F058C082E890E40895883A910520 +:1016500009F454C0893A910509F453C08A3A9105B6 +:1016600009F452C08B3A910509F451C08C3A9105A6 +:1016700009F450C08D3A910509F44FC0803B9105A3 +:1016800009F44EC08E3A910509F44DC08F3A910588 +:1016900009F44CC0813B910509F44BC0823B910594 +:1016A00009F44AC0833B910509F449C0843B910584 +:1016B00009F448C0853B910509F447C0863B910574 +:1016C00009F446C0873B910509F445C0883B910564 +:1016D00009F444C0893B910509F443C08A3B910554 +:1016E00009F442C080E094E4089580E090E0089519 +:1016F00081E890E4089583E890E4089582EE94E40C +:10170000089589EE94E408958AEE94E4089585EBB3 +:1017100094E4089586EB94E4089587EB94E40895A7 +:101720008CEC94E408958DEC94E4089583E895E4BA +:1017300008958AE895E4089582E995E4089584E996 +:1017400095E4089581E296E4089583E296E408958D +:1017500084E296E4089585E296E4089586E296E4AC +:10176000089587E296E408958AE296E4089508953C +:1017700096E0799FF001112494E5899FE00DF11D19 +:101780001124E60FF11DEE0FFF1FEC51FF4F859165 +:1017900094910895880F991FFC01E05AF0408591BB +:1017A00094910895880F991FFC01E052FF4F859195 +:1017B0009491089526E0729FF001112444E5849FDE +:1017C000E00DF11D1124E60FF11DEE0FFF1FEC518E +:1017D000FF4F859194919C013A9521154FE1340773 +:1017E00008F41EC13F512115304120F49F700E9422 +:1017F000D20B08959C0130532115304118F49927DC +:10180000906C0895811520E5920769F40E94BB1A37 +:101810004FEF84E39CE0415080409040E1F700C0EE +:1018200000000C941D22813020E5920751F48CE5D4 +:1018300093E00E9452078091D70181608093D70185 +:1018400008959C0130552115304108F051C0292FD1 +:1018500033272F70332721303105D9F4AC01437081 +:10186000552702C0220F331F4A95E2F73C68AC01AE +:1018700064E0440F551F6A95E1F744275370242B09 +:10188000352B73E0880F991F7A95E1F780769927B9 +:101890001DC02230310529F4982F8827816F906A66 +:1018A000089523303105A9F4AC014370552721E098 +:1018B00030E002C0220F331F4A95E2F73C6843E054 +:1018C000880F991F4A95E1F7807E9770822B932BA2 +:1018D000089524303105E1F4AC014370552721E02F +:1018E00030E002C0220F331F4A95E2F73A68E7CF93 +:1018F0009C0130572115304118F49F709062089573 +:101900009C0130582115304118F49F70906A089559 +:10191000803E9105E0F4803C910558F581339105B6 +:1019200009F46FC048F48932910509F463C08A3222 +:10193000910509F46DC072C089339105E9F08238D0 +:101940009105D1F08533910509F44DC067C0833E00 +:10195000910581F138F4803E9105B9F0823E910500 +:10196000D9F05CC0863E910561F1873E9105A1F1F9 +:1019700055C00E94CA0B08952091EA0120FD02C0C3 +:1019800021FF4CC080EE90E049C08091EA0180FFC9 +:10199000F9CF89E390E042C08091EA0182FF0EC056 +:1019A0008091EA0184FF03C080E090E037C083EEBD +:1019B00090E034C08091EA0182FFF2CF82EE90E0A5 +:1019C0002DC08091EA0183FF0BC08091EA0184FD64 +:1019D000EBCF87EE90E022C08091EA0183FFF5CF44 +:1019E00086EE90E01BC08091EA0185FF07C089E286 +:1019F00090E014C08091EA0185FFF9CF85E390E083 +:101A00000DC08091EA0186FF07C08AE290E006C01F +:101A10008091EA0186FFF9CF81E390E00E94F80A05 +:101A20000895089580916D0108959FB7F8941092DC +:101A30005C019FBF9091F001943009F057C09091E4 +:101A4000E9009F703091EC00232F217030FD20E8D9 +:101A5000922B24E02093E9002091EB0020FF43C06B +:101A60002091EE0027FF3FC020915A01222321F050 +:101A70002091E80025FF37C010925A0126E03091EE +:101A8000E80035FD15C03091F001343061F530913A +:101A9000EB0035FD28C0215021F481E080935A01EC +:101AA00022C0EFE9FFE03197F1F700C00000E7CF77 +:101AB0008093F1008091E80085FD0AC08091E800E4 +:101AC00080FFFCCF8091E8008E778093E80006C00D +:101AD0008FB7F89421E020935C018FBF9F709093A3 +:101AE000E90080E008959F709093E9008FEF0895DA +:101AF000CF93DF9300D01F92CDB7DEB79C018091CA +:101B0000F001843019F593E099833B832A83909305 +:101B1000E9008FEF9091E800815095FD06C095EDAA +:101B20009A95F1F700008111F5CF8091E80085FFCB +:101B30000DC040E050E063E070E0CE0101960E94ED +:101B400048108091E8008E778093E8000F900F9006 +:101B50000F90DF91CF910895CF93DF9300D01F9224 +:101B6000CDB7DEB72091F001243021F522E02983A2 +:101B70009B838A8383E08093E9008FEF9091E80054 +:101B8000815095FD06C095ED9A95F1F70000811101 +:101B9000F5CF8091E80085FF0DC040E050E063E0A4 +:101BA00070E0CE0101960E9448108091E8008E7787 +:101BB0008093E8000F900F900F90DF91CF910895E0 +:101BC0002091F0012430F1F422E02093E9002FEF7E +:101BD0003091E800215035FD06C035ED3A95F1F71A +:101BE00000002111F5CF2091E80025FF0BC040E057 +:101BF00050E065E070E00E9448108091E8008E7728 +:101C00008093E8000895CF93DF932091F001243072 +:101C100009F048C0EC0180910C018823E1F080912B +:101C20000D018823C1F085E08093E9008FEF90914A +:101C3000E800815095FD06C095E19A95F1F7000006 +:101C40008111F5CF8091E80085FF2CC040E050E085 +:101C500060E170E017C081E08093E9008FEF909120 +:101C6000E800815095FD06C095ED9A95F1F70000CA +:101C70008111F5CF8091E80085FF14C040E050E06D +:101C800068E070E0CE010E9448108091E8008E77F5 +:101C90008093E80080E1FE01ADE5B1E001900D9296 +:101CA0008A95E1F7DF91CF91089583E993E00E944F +:101CB00052078091EF01811109C00E94DD110E943D +:101CC0003A128091E20084608093E20008958FE8E8 +:101CD00093E00E9452071092EF0108958BE893E081 +:101CE0000C94520787E893E00E9452070C94ED2B66 +:101CF00083E893E00E9452070E94B7210E94F32BD1 +:101D00000E94DF140C94110D20915B012F5F822F34 +:101D100062E30E94612D992319F020935B010895DD +:101D200010925B0180915C01882371F18091F00138 +:101D3000843041F58091E9008F702091EC00922F62 +:101D4000917020FD90E8892B94E09093E9009091A8 +:101D5000EB0090FF14C09091EE0097FF10C090919F +:101D6000E80095FF03C01092F100F9CF9091E800D0 +:101D700090FF05C09091E8009E779093E8008F70E7 +:101D80008093E90010925C01089542E061EC81E0EB +:101D90000E94571142E061EC82E00E94571142E03C +:101DA00061EC83E00E94571142E261EC84E00E9402 +:101DB000571142E161EC85E00C9457118091F201DA +:101DC000833009F455C030F4813071F0823009F469 +:101DD0008EC008958A3009F47AC08B3009F460C04F +:101DE000893009F09CC020C08091F101813A09F04E +:101DF00096C08091E800877F8093E8008091F5018C +:101E00009091F601892B21F460E18DE591E003C00A +:101E100060E080E090E070E00E9493108091E80024 +:101E20008B778093E80008958091F101813209F069 +:101E300076C08091F5019091F601009719F0049712 +:101E400009F06DC08091E800877F8093E800809161 +:101E5000E80082FD05C08091F0018111F8CF5FC0DC +:101E60008091F10080936D018091E8008B7753C0E1 +:101E70008091F101813A09F052C08091F501909171 +:101E8000F601892B09F04BC08091E800877F809391 +:101E9000E8008091E80080FFFCCF80910C0136C003 +:101EA0008091F1018132D9F58091F5019091F6018F +:101EB000892BA9F58091E800877F8093E8000E9434 +:101EC0008C118091F30180930C010C94BB1A8091CA +:101ED000F101813221F58091E800877F8093E8004D +:101EE0000E948C118091F40180936E01089580917D +:101EF000F101813AA1F48091E800877F8093E800A6 +:101F00008091E80080FFFCCF80916E018093F1000A +:101F10008091E8008E778093E8000C948C110895EE +:101F200084B7877F84BF88E10FB6F8948093600000 +:101F3000109260000FBE90E080E80FB6F894809396 +:101F40006100909361000FBE0E946C150E94DD112C +:101F50000E943A128091E20084608093E20085E161 +:101F60009DE00E94F62078940E94BF140E946E1596 +:101F700082E091E00E94DA140E94DB2B82E793E07A +:101F80000E9452078091F001853089F48EE693E03B +:101F90000E9452070E947B218091EE01882391F3D9 +:101FA0000E94A321882371F30E943210EBCF0E947C +:101FB0009C15E8CF292F332723303105C9F064F46D +:101FC0002130310581F02230310509F043C08DE820 +:101FD00090E02BEC33E042C021323105F1F02232A7 +:101FE000310541F137C082E190E028E534E036C0A8 +:101FF00099278130910541F08230910541F0892B7C +:1020000049F5E7ECF3E005C0EFEAF3E002C0E7E9E9 +:10201000F3E0849190E09F0121C06530D8F4E62F71 +:10202000F0E0EE0FFF1FEB5DFE4F2081318189E074 +:1020300090E014C0653070F470E0FB01EE0FFF1FFC +:10204000E55EFE4F20813181FB01EA5EFE4F80811B +:1020500090E004C080E090E020E030E0FA013183BD +:102060002083089580E189BD82E189BD09B400FE25 +:10207000FDCF8091D8008F7D8093D8008091E000C3 +:1020800082608093E0008091E00081FDFCCF0895A4 +:10209000CF92DF92EF92FF920F931F93CF93DF9334 +:1020A000EC018B016A010E94AB11811133C0C11494 +:1020B000D10439F0F60180819181081B190BC80FFA +:1020C000D91FE12CF12C0115110519F18091E800BF +:1020D00085FD16C08091E8008E778093E800C114DA +:1020E000D10449F0F60180819181E80EF91EF18258 +:1020F000E08285E00FC00E94AB11882321F30AC063 +:1021000089918093F10001501109FFEFEF1AFF0A46 +:10211000DACF80E0DF91CF911F910F91FF90EF9088 +:10212000DF90CF9008952091F7013091F8012617A4 +:10213000370748F06115710539F42091E8002E77D2 +:102140002093E80001C0B90140E061157105A9F1D3 +:102150002091F001222309F443C0253009F442C044 +:102160002091E80023FD40C02091E80022FD32C00C +:102170002091E80020FFE9CF4091F3002091F20088 +:1021800030E0342BFC01CF016115710559F0283086 +:10219000310540F481918093F100615071092F5F06 +:1021A0003F4FF1CF41E02830310509F040E0209168 +:1021B000E8002E772093E800C8CF4111C9CF0AC0AC +:1021C0008091F001882361F0853061F08091E80012 +:1021D00083FD0AC08091E80082FFF2CF80E008957D +:1021E00082E0089583E0089581E008952091F70149 +:1021F0003091F8012617370748F06115710539F459 +:102200002091E8002E772093E80001C0B901FC017D +:1022100020E06115710591F18091F001882309F4A6 +:1022200040C0853009F43FC08091E80083FD3DC087 +:102230008091E80082FD2FC08091E80080FFE9CF07 +:102240002091F3008091F20090E0922B61157105CE +:1022500059F08830910540F424912093F100319693 +:10226000615071090196F2CF21E0089709F020E052 +:102270008091E8008E778093E800CBCF2111CCCFFE +:102280000AC08091F001882361F0853061F080916F +:10229000E80083FD0AC08091E80082FFF2CF80E071 +:1022A000089582E0089583E0089581E00895982FCD +:1022B000973058F59093E900981739F07091EC0039 +:1022C0002091ED005091F00003C0242F762F50E0B4 +:1022D00021FF19C03091EB003E7F3093EB0030912D +:1022E000ED003D7F3093ED003091EB003160309395 +:1022F000EB007093EC002093ED005093F0002091E0 +:10230000EE0027FF07C09F5FD3CF8F708093E90057 +:1023100081E0089580E008958091F10187FF11C068 +:102320008091E80082FD05C08091F0018111F8CF15 +:1023300011C08091E8008B770BC08091F001882359 +:1023400049F08091E80080FFF8CF8091E8008E7717 +:102350008093E80008952091E4003091E50095E62F +:102360004091EC00842F817040FF22C08091E800F2 +:1023700080FD1CC08091F001882391F0853091F0A0 +:102380008091EB0085FD10C04091E4005091E50084 +:102390004217530729F39A01915011F784E00895E9 +:1023A00082E0089583E0089581E0089580E0089533 +:1023B0004091E80042FFDECF08950E944B120E9438 +:1023C0005312E0EEF0E0808181608083E8EDF0E080 +:1023D00080818F77808319BCA7EDB0E08C918E7FD0 +:1023E0008C9380818F7E80831092EF0108950F93EC +:1023F0001F93CF93DF930E944B120E945312C8ED9C +:10240000D0E088818F7788838881806888838881FD +:102410008F7D888319BC1092F0011092EC0110920C +:10242000EE011092ED0100EE10E0F80180818B7F4B +:10243000808388818160888342E060E080E00E9440 +:102440005711E1EEF0E080818E7F8083E2EEF0E0D4 +:10245000808181608083808188608083F8018081B1 +:102460008E7F8083888180618883DF91CF911F91E7 +:102470000F910895E8EDF0E080818F7E8083E7ED95 +:10248000F0E080818160808384E082BF81E080937E +:10249000EF010C94F711E8EDF0E080818E7F8083EE +:1024A0001092E20008951092DA001092E10008956F +:1024B0001F920F920FB60F9211242F933F934F93B9 +:1024C0005F936F937F938F939F93AF93BF93EF939C +:1024D000FF938091E10082FF0BC08091E20082FFB8 +:1024E00007C08091E1008B7F8093E1000E94840E01 +:1024F0008091DA0080FF1FC08091D80080FF1BC050 +:102500008091DA008E7F8093DA008091D90080FF7D +:102510000DC080E189BD82E189BD09B400FEFDCF17 +:1025200081E08093F0010E94550E05C019BC109205 +:10253000F0010E94670E8091E10080FF19C0809138 +:10254000E20080FF15C08091E2008E7F8093E20060 +:102550008091E20080618093E2008091D8008062E7 +:102560008093D80019BC85E08093F0010E94720E20 +:102570008091E10084FF30C08091E20084FF2CC094 +:1025800080E189BD82E189BD09B400FEFDCF809163 +:10259000D8008F7D8093D8008091E1008F7E80935A +:1025A000E1008091E2008F7E8093E2008091E20062 +:1025B00081608093E2008091EC01882311F084E037 +:1025C00007C08091E30087FD02C081E001C083E085 +:1025D0008093F0010E94780E8091E10083FF29C072 +:1025E0008091E20083FF25C08091E100877F809386 +:1025F000E10082E08093F0011092EC018091E10013 +:102600008E7F8093E1008091E2008E7F8093E200D4 +:102610008091E20080618093E20042E060E080E02F +:102620000E9457118091F00088608093F0000E9412 +:102630006E0EFF91EF91BF91AF919F918F917F911E +:102640006F915F914F913F912F910F900FBE0F901F +:102650001F9018951F920F920FB60F9211242F936F +:102660003F934F935F936F937F938F939F93AF931A +:10267000BF93CF93DF93EF93FF93C091E900CF70A7 +:102680008091EC00D82FD17080FDD0E81092E90045 +:102690008091F000877F8093F00078940E946E1301 +:1026A0001092E9008091F00088608093F000CD2BBB +:1026B000CF70C093E900FF91EF91DF91CF91BF916F +:1026C000AF919F918F917F916F915F914F913F91CA +:1026D0002F910F900FBE0F901F9018951F93CF93BF +:1026E000DF93CDB7DEB7AA970FB6F894DEBF0FBE63 +:1026F000CDBFE1EFF1E088E08E0F9091F100919372 +:102700008E13FBCF0E94DE0E8091E80083FF1FC175 +:102710008091F1019091F201492F50E04A3051052A +:1027200008F015C1FA01EA5AFF4F0C94812D803848 +:1027300081F0823809F00BC18091F5018F70809390 +:10274000E9008091EB0085FB882780F91092E90071 +:1027500006C08091ED019091EE01911182609091FF +:10276000E800977F9093E8008093F1001092F100C9 +:10277000C8C0282F2D7F09F0EAC0882319F08230C5 +:1027800061F0E5C08091F301813009F0E0C0933041 +:1027900009F080E08093EE012BC08091F30181115C +:1027A00027C08091F5018F7009F4D1C08093E900B2 +:1027B0002091EB0020FF1CC0933021F48091EB00AE +:1027C000806214C09091EB0090619093EB0021E047 +:1027D00030E0A90102C0440F551F8A95E2F74093EB +:1027E000EA001092EA008091EB0088608093EB0091 +:1027F0001092E9008091E800877F86C08111A7C010 +:102800001091F3011F778091E3008078812B8093F2 +:10281000E3008091E800877F8093E8000E948C119C +:102820008091E80080FFFCCF8091E3008068809376 +:10283000E300111102C082E001C083E08093F00147 +:1028400086C08058823008F082C08091F301909158 +:10285000F4018C3D53E0950779F583E08A838AE2A1 +:1028600089834FB7F894DE01139620E03EE051E2F1 +:10287000E32FF0E050935700E49120FF03C0E2956E +:10288000EF703F5FEF708E2F90E0EA3010F0C79648 +:1028900001C0C0968D939D932F5F243149F74FBFA0 +:1028A0008091E800877F8093E8006AE270E0CE01C3 +:1028B00001960E94931014C0AE014F5F5F4F60916C +:1028C000F5010E94DA0FBC01009709F440C0909115 +:1028D000E800977F9093E80089819A810E94F61022 +:1028E0008091E8008B778093E80031C0803879F5DB +:1028F0008091E800877F8093E8008091EC018093CD +:10290000F1008091E8008E778093E8000E948C119E +:102910001EC081111CC09091F3019230C0F48091CF +:10292000E800877F8093E8009093EC010E948C116F +:102930008091EC01811106C08091E30087FD02C007 +:1029400081E001C084E08093F0010E94C50E809177 +:10295000E80083FF0AC08091E800877F8093E80049 +:102960008091EB0080628093EB00AA960FB6F894FA +:10297000DEBF0FBECDBFDF91CF911F910895CF93E2 +:102980008091F0018823A1F0C091E900CF7090916F +:10299000EC00892F817090FD80E8C82B1092E9002F +:1029A0008091E80083FD0E946E13CF70C093E90010 +:1029B000CF91089590937401809373010895E091ED +:1029C0007301F0917401309721F00190F081E02DB6 +:1029D000099480E00895EF92FF920F931F93CF9395 +:1029E000DF93E0917301F09174013097B1F18C01A4 +:1029F0000280F381E02D09958091D70182FF2DC0DF +:102A000080FF04C08DE895E00E945207E80110E1C4 +:102A100087E8E82E85E0F82E8091D70180FF0BC073 +:102A200088811F928F93FF92EF920E94EB070F9085 +:102A30000F900F900F90115021961111EDCF8091B2 +:102A4000D70180FF0AC085E895E0DF91CF911F9103 +:102A50000F91FF90EF900C945207DF91CF911F914F +:102A60000F91FF90EF900895E0917301F091740140 +:102A7000309721F00480F581E02D0994089520918C +:102A80007101309172018217930771F09093720176 +:102A900080937101E0917301F0917401309721F0FE +:102AA0000680F781E02D0994089520916F013091FF +:102AB00070018217930771F09093700180936F01FA +:102AC000E0917301F0917401309721F00084F18559 +:102AD000E02D0994089508950C946B150E94B92176 +:102AE0000E9462090C947F22CF93C82F8091D70156 +:102AF00082FF1EC080FF04C086EA95E00E94520754 +:102B00008091D70180FF0CC01F92CF9381EA95E09E +:102B10009F938F930E94EB070F900F900F900F9051 +:102B20008091D70180FF04C08FE995E00E94520791 +:102B30008C2FCF910C94110DCF92DF92EF92FF92D8 +:102B40000F931F93CF93DF93CDB7DEB72B970FB6BD +:102B5000F894DEBF0FBECDBF0E947F0986E7C82E66 +:102B600081E0D82E00E010E0E02E802F0E94AB0A1A +:102B7000F60141916F01F42EF826B1F40F5F1F4F5B +:102B80000E30110589F78FEF89838A831B820E949B +:102B9000C2218160782F9D838C8349815A816B810A +:102BA0008D810E943F1640C09091D70191FF04C0D3 +:102BB0008B870E94B10A8B8520E030E04F2D50E0DA +:102BC000922FBA01022E02C0759567950A94E2F71A +:102BD00060FF24C02E83EF8221E030E0690102C053 +:102BE000CC0CDD1C9A95E2F790E08C219D21892B7D +:102BF00009F420E028870E94C2218160782F9A87FB +:102C000089874E815F8168858A850E943F16F80119 +:102C1000EA58FE4F8081C826C08206C02F5F3F4F12 +:102C20002630310569F6AACF0E94F0251091750172 +:102C30000E94DF141817A1F00E94DF148093750121 +:102C40002B960FB6F894DEBF0FBECDBFDF91CF91AC +:102C50001F910F91FF90EF90DF90CF900C9474151F +:102C60002B960FB6F894DEBF0FBECDBFDF91CF918C +:102C70001F910F91FF90EF90DF90CF900895CF9329 +:102C8000DF93CDB7DEB72B970FB6F894DEBF0FBE3C +:102C9000CDBF4F83588769877A878B87DE0111966E +:102CA00086E0FD0111928A95E9F785E0FE013796ED +:102CB00001900D928A95E1F749815A816B817C815F +:102CC0008D819E810E94551D2B960FB6F894DEBF14 +:102CD0000FBECDBFDF91CF910895CF93882309F424 +:102CE000C2C0C82F823859F40E94DF1481FDBBC0D6 +:102CF00089E30E94F11F0E94D02089E30CC0833831 +:102D000079F40E94DF1480FDAEC083E50E94F11FBC +:102D10000E94D02083E50E944420CF910C94D020C3 +:102D2000843859F40E94DF1482FD9DC087E40E941C +:102D3000F11F0E94D02087E4EECF8CEF8C0F813AF8 +:102D400048F48C2F0E94832A81118DC08C2F0E9401 +:102D5000F11FE3CF80E28C0F883048F4C77081E028 +:102D600001C0880FCA95EAF70E949920D6CF8BE55B +:102D70008C0F833078F4C53A29F0C63A31F083E8F5 +:102D800090E005C081E890E002C082E890E0CF9139 +:102D90000C943F1588E58C0F833108F064C0C83A65 +:102DA00039F1C93A41F1CA3A49F1CB3A51F1CC3A39 +:102DB00059F1CD3A61F1C03B69F1CE3A71F1CF3AA8 +:102DC00079F1C13B81F1C23B89F1C33B91F1C43B35 +:102DD00099F1C53BA1F1C63BA9F1C73BB1F1C83B95 +:102DE000B9F1C93BC1F1CA3BC9F180E090E038C0FC +:102DF00082EE90E035C089EE90E032C08AEE90E03D +:102E00002FC085EB90E02CC086EB90E029C087EBCB +:102E100090E026C08CEC90E023C08DEC90E020C0C8 +:102E200083E891E01DC08AE891E01AC082E991E050 +:102E300017C084E991E014C081E292E011C083E2FE +:102E400092E00EC084E292E00BC085E292E008C0FE +:102E500086E292E005C087E292E002C08AE292E058 +:102E6000CF910C945515CF910895882309F44BC048 +:102E7000823859F40E94DF1481FF45C089E30E9423 +:102E8000F11F0E94D02089E30CC0833871F40E94A6 +:102E9000DF1480FF38C083E50E94F11F0E94D0201C +:102EA00083E50E9444200C94D020843859F40E9479 +:102EB000DF1482FF28C087E40E94F11F0E94D02007 +:102EC00087E4EFCF9CEF980F913A58F390E2980F78 +:102ED000983050F4877091E001C0990F8A95EAF715 +:102EE000892F0E949F20DFCF9BE5980F933020F41D +:102EF00080E090E00C943F15885A833120F480E004 +:102F000090E00C9455150895882321F00E94992093 +:102F10000C94D0200895882321F00E949F200C94C7 +:102F2000D0200895BF92CF92DF92EF92FF920F933D +:102F30001F93CF93DF9300D000D000D0CDB7DEB782 +:102F400025E0FC01DE01119601900D922A95E1F732 +:102F5000FC01408131810281258122952F7063819E +:102F60007481672B09F4E5C23F3F19F44F3F09F420 +:102F7000E0C27C0149833A8389819A812E830E9431 +:102F8000B01F182FB92E0E94AF1F0E94761EEB2D86 +:102F9000E295EF70F0E0E05AFF4F2E810C94812D06 +:102FA0008B2D807F9B2D9F70F92E882319F0F29432 +:102FB00080EFF822002349F0FF2009F467C28F2D2B +:102FC0000E94A9200E94D02061C2812F0E94351743 +:102FD000FF2009F4AEC28F2D0E94AF2026960FB6B7 +:102FE000F894DEBF0FBECDBFDF91CF911F910F913F +:102FF000FF90EF90DF90CF90BF900C94D0203B2DAE +:10300000307F8B2D8F70303211F08295807F1123AD +:1030100019F0113021F12CC00023B9F0222309F45A +:10302000A0C1213009F09DC126960FB6F894DEBFED +:103030000FBECDBFDF91CF911F910F91FF90EF9009 +:10304000DF90CF90BF900C94B920222319F021304B +:1030500009F46FC28E830E94BC208E8196C100232A +:1030600021F0223008F065C27CC1211162C28DC1FD +:10307000002321F0222309F474C108C2222309F499 +:1030800084C119C22B2D26952695237030E0211579 +:10309000310521F021303105D1F04BC2002321F060 +:1030A000812F9B2D937002C080E090E026960FB692 +:1030B000F894DEBF0FBECDBFDF91CF911F910F916E +:1030C000FF90EF90DF90CF90BF900C943F150023BE +:1030D00021F0812F9B2D937002C080E090E0269616 +:1030E0000FB6F894DEBF0FBECDBFDF91CF911F9119 +:1030F0000F91FF90EF90DF90CF90BF900C945515FB +:10310000812F002319F00E94762402C00E94DE2441 +:1031100026960FB6F894DEBF0FBECDBFDF91CF91DC +:103120001F910F91FF90EF90DF90CF90BF900C9484 +:1031300063258B2D837009F07BC00111FAC1812FAB +:10314000829586958770880F880F912F9F70C92E62 +:10315000D12CE12CF12C082E04C0CC0CDD1CEE1C73 +:10316000FF1C0A94D2F714FF12C04FE050E060E059 +:1031700070E004C0440F551F661F771F8A95D2F771 +:10318000CB01BA01609570958095909503C060E081 +:1031900070E0CB012B2D269526952370422F50E011 +:1031A00042305105D9F04330510569F16C297D2930 +:1031B0008E299F294130510551F126960FB6F8947A +:1031C000DEBF0FBECDBFDF91CF911F910F91FF905A +:1031D000EF90DF90CF90BF900C949D1E6C297D29BD +:1031E0008E299F2926960FB6F894DEBF0FBECDBF5D +:1031F000DF91CF911F910F91FF90EF90DF90CF90D3 +:10320000BF900C94B91E0E949D1EC701B601269660 +:103210000FB6F894DEBF0FBECDBFDF91CF911F91E7 +:103220000F91FF90EF90DF90CF90BF900C94811E94 +:10323000002319F08B2D817001C08695882309F435 +:1032400078C1812F829586958770880F880F912F7E +:103250009F70C92ED12CE12CF12C082E04C0CC0C6F +:10326000DD1CEE1CFF1C0A94D2F714FF12C04FE0C5 +:1032700050E060E070E004C0440F551F661F771FE8 +:103280008A95D2F7CB01BA0160957095809590959B +:1032900003C060E070E0CB012B2D269526952370AE +:1032A000422F50E042305105D9F04330510569F1C9 +:1032B0006C297D298E299F294130510551F126968F +:1032C0000FB6F894DEBF0FBECDBFDF91CF911F9137 +:1032D0000F91FF90EF90DF90CF90BF900C94771FED +:1032E0006C297D298E299F2926960FB6F894DEBF7A +:1032F0000FBECDBFDF91CF911F910F91FF90EF9047 +:10330000DF90CF90BF900C94931F0E94771FC7014E +:10331000B60126960FB6F894DEBF0FBECDBFDF9183 +:10332000CF911F910F91FF90EF90DF90CF90BF90C2 +:103330000C945B1F103FD1F118F4103E50F4A1C063 +:10334000123F09F463C008F44CC0133F09F473C082 +:1033500098C01F708B2D8F710023A1F00E94F41E66 +:10336000812F26960FB6F894DEBF0FBECDBFDF913A +:10337000CF911F910F91FF90EF90DF90CF90BF9072 +:103380000C9484170E94151F812F26960FB6F8946F +:10339000DEBF0FBECDBFDF91CF911F910F91FF9088 +:1033A000EF90DF90CF90BF900C948B170023A9F083 +:1033B0002111BFC08B2D8F7126960FB6F894DEBFFA +:1033C0000FBECDBFDF91CF911F910F91FF90EF9076 +:1033D000DF90CF90BF900C943A1F223008F0A9C024 +:1033E000E9CF0023A9F08B2D8F7126960FB6F894A4 +:1033F000DEBF0FBECDBFDF91CF911F910F91FF9028 +:10340000EF90DF90CF90BF900C94F41E002359F3FF +:103410008B2D8F7126960FB6F894DEBF0FBECDBFF1 +:10342000DF91CF911F910F91FF90EF90DF90CF90A0 +:10343000BF900C94151F002399F08B2D8F71269649 +:103440000FB6F894DEBF0FBECDBFDF91CF911F91B5 +:103450000F91FF90EF90DF90CF90BF900C94DF1E04 +:1034600026960FB6F894DEBF0FBECDBFDF91CF9189 +:103470001F910F91FF90EF90DF90CF90BF900C9431 +:10348000D51E0023A9F0222309F4ADCF812F269663 +:103490000FB6F894DEBF0FBECDBFDF91CF911F9165 +:1034A0000F91FF90EF90DF90CF90BF900C946D162E +:1034B000222309F4ADCF812F26960FB6F894DEBFF4 +:1034C0000FBECDBFDF91CF911F910F91FF90EF9075 +:1034D000DF90CF90BF900C9435174B2D4F70612F1C +:1034E000C7010E94F40726960FB6F894DEBF0FBE00 +:1034F000CDBFDF91CF911F910F91FF90EF90DF90A3 +:10350000CF90BF900C94F91D4B2D4F70612FC701C8 +:1035100026960FB6F894DEBF0FBECDBFDF91CF91D8 +:103520001F910F91FF90EF90DF90CF90BF900C9480 +:10353000B70B26960FB6F894DEBF0FBECDBFDF9156 +:10354000CF911F910F91FF90EF90DF90CF90BF90A0 +:1035500008950E94B6200E948B200E94D0200E94D5 +:1035600096260E94632580E090E00E943F1580E04F +:1035700090E00C9455150E94A6200C94A91A0E9464 +:10358000B01F292F22952F7030E02C3031054CF4DC +:103590002A3031056CF4225031092230310588F48B +:1035A00007C02C30310549F02F30310531F009C00A +:1035B000803E48F0803F29F406C093FB882780F9BD +:1035C000089580E0089581E00895CF93DF9300D0BF +:1035D00000D01F92CDB7DEB70F900F900F900F90D5 +:1035E0000F90DF91CF910895CF93DF9300D000D05B +:1035F00000D0CDB7DEB726960FB6F894DEBF0FBE6B +:10360000CDBFDF91CF9108951F93CF93DF93C091EA +:10361000840116E080918501C81799F0D0E01C9FC5 +:10362000F0011D9FF00D1124EA57FE4F408151819A +:1036300062817381848195810E94F41A2196C770FA +:10364000E9CFDF91CF911F9108954091B60150913C +:10365000B7016091B8017091B9018091BA01909160 +:10366000BB010C94F41A8091BB0182958F7009F014 +:1036700054C08091B801882309F44FC0809184011F +:10368000A09185016091B6017091B7014091B90197 +:103690005091BA01B6E08A1709F43FC090E0411595 +:1036A0005105C1F17F3F11F46F3FA1F1B89FF001C7 +:1036B000B99FF00D1124EA57FE4F218172132AC0E1 +:1036C0002081621327C02281211124C023813481EB +:1036D0002417350710F421503109241B350B283CE1 +:1036E0003105C0F42091BB012F7020612093BB01F4 +:1036F00026E0289FF001299FF00D1124E557FE4F89 +:1037000080818F708061808386EB91E00E949217A8 +:103710000C94041B01968770BECF0895CF92DF9260 +:10372000EF92FF920F931F93CF93DF93CDB7DEB746 +:1037300062970FB6F894DEBF0FBECDBF8C0185E057 +:10374000F801DE011D9601900D928A95E1F7D801EE +:103750004C9111965C91119712966C911297139659 +:10376000CD90DC9014973091B6017091B7018091A3 +:10377000B9019091BA01009709F46BC17F3F19F428 +:103780003F3F09F466C1E090B801EE2009F4C0C0E3 +:103790002091BB01C816D90628F0F601E81BF90BE9 +:1037A000CF0104C0809590958C0D9D1DFF24F3944E +:1037B000883C910578F0F12C207F09F0C6C07C2D63 +:1037C000D98AC88A89890E94E51A86EB91E00E940D +:1037D0009217B1C0822F807F09F046C0751314C0C4 +:1037E000341312C0611110C02F7020612093BB01EF +:1037F0000E94251B86EB91E00E9492178091BB01ED +:10380000D80115968C932EC0CD2819F15F3F11F485 +:103810004F3FF9F0F62E61111CC080918401209178 +:10382000850136E0821709F45AC090E0389FF00114 +:10383000399FF00D1124EA57FE4F7181571306C0CE +:103840007081471303C07281711103C001968770A4 +:10385000E9CFF62E662309F418C18091BB0181607F +:103860008093BB01F12C11C1751308C0341306C03D +:10387000611104C08091BB01D801C3C04D875E8730 +:103880008D859E856A8B0E94BF1A6A898823E1F123 +:103890006623D1F12091BB01822F82958F7090E039 +:1038A000029774F08091B6019091B70198878F8349 +:1038B0001986DB86CA862C87CE0107960E9492174E +:1038C00086E0F801A6EBB1E001900D928A95E1F750 +:1038D0000E94331B0E94251BFF24F394D6C04D8702 +:1038E0005E878D859E850E94B01F292F22952F709F +:1038F00030E0223031050CF0BCC09F7009F0B6C03A +:10390000805E883008F4C1C0C8010E949217E4CFDD +:10391000C816D90608F453C0F601E81BF90BCF010D +:10392000883C910508F450C0F12C7C2DD98AC88AB6 +:1039300089890E94E51AE6EBF1E086E0DF011D923D +:103940008A95E9F70E94251BA0C0751314C0341393 +:1039500012C0611110C08091BB01F8018583C801BC +:103960000E94921786E0E6EBF1E0DF011D928A9556 +:10397000E9F7FE2C8AC04D875E878D859E856A8B10 +:103980000E94BF1A6A89882309F4BECF662309F40E +:10399000BBCF2091BB01822F82958F7090E0029760 +:1039A0000CF48ECF8091B6019091B7019A838983F0 +:1039B0001B82DD82CC822E83CE0101967FCF809543 +:1039C00090958C0D9D1DACCFF62E662309F49CCFEF +:1039D00075132EC034132CC02091BB0120FD1FC0D5 +:1039E000822F82958F70D9F0D80115962C93159758 +:1039F0008F3049F08F5F982F9295907F822F8F7034 +:103A0000892B15968C93C8010E94921786E0F801C5 +:103A1000A6EBB1E001900D928A95E1F793CF86E095 +:103A2000F801A6EBB1E001900D928A95E1F72DC067 +:103A30004D875E878D859E850E94BF1A811140CF7C +:103A40008091BB0181608093BB01C8010E949217E5 +:103A50001CC0662309F458CF4D875E878D859E85EF +:103A60000E94BF1A882309F44FCF2ACF811148CF73 +:103A70000CC0243031050CF047CF9F7009F440CFC3 +:103A8000F8019581907F09F03BCF8F2D62960FB69C +:103A9000F894DEBF0FBECDBFDF91CF911F910F9184 +:103AA000FF90EF90DF90CF9008951F93CF93DF9317 +:103AB000CDB7DEB72C970FB6F894DEBF0FBECDBFE3 +:103AC0004F83588769877A878B879C87CE010796B3 +:103AD0000E948E1B882369F08F8198852A853B85FB +:103AE000232BF1F19F3F09F063C08F3F09F060C0C5 +:103AF00037C086E0FE013796DE01119601900D92E7 +:103B00008A95E1F76F817885EA85FB85309741F1E9 +:103B10007F3F11F46F3F21F12091850130E0C90111 +:103B20000196877099274091840150E0841795078A +:103B300009F447C069837A83FD83EC8396E0929F02 +:103B4000D001939FB00D1124AA57BE4FFE013196AC +:103B500001900D929A95E1F7809385010E94041BD4 +:103B600016E080918401909185018917C1F1189F19 +:103B7000C00111248A579E4F0E948E1B882379F121 +:103B8000E09184011E9FF0011124EA57FE4F40810D +:103B9000518162817381848195810E94F41A8091A0 +:103BA000840190E001968770992780938401D9CF92 +:103BB0004F81588569857A858B859C850E94F41A8A +:103BC000CFCF0E94BB1A1092850110928401E6EBC0 +:103BD000F1E086E0DF011D928A95E9F7C1CF2C96CE +:103BE0000FB6F894DEBF0FBECDBFDF91CF911F910E +:103BF0000895EF92FF920F931F93CF93DF938C0161 +:103C0000009709F46CC0F12CEE24E394E8012196AE +:103C1000F8018491843740F4843008F051C0813039 +:103C200081F0823019F15BC0853709F444C0A8F1F6 +:103C30009CE7980F903708F052C08F770E94351795 +:103C400041C00E5F1F4FFE01C49180E28C0F88308F +:103C500048F4C7708E2D01C0880FCA95EAF70E94FC +:103C6000A92014C08C2F0E946D162DC00E5F1F4F0F +:103C7000FE01C49180E28C0F883058F4C7708E2DFD +:103C800001C0880FCA95EAF70E94AF200E94D02099 +:103C90001AC08C2F0E94351716C00E5F1F4FFE01F1 +:103CA000C491CC2381F08FE99FE00197F1F700C028 +:103CB0000000C150F6CF0E5F1F4FFE01F49003C00D +:103CC0000E946D168E018F2D882309F49FCFEFE996 +:103CD000FFE03197F1F700C000008150F5CFDF9190 +:103CE000CF911F910F91FF90EF90089508956093E9 +:103CF000C0017093C1018093C2019093C3010C94E1 +:103D0000A91A0F931F930091C0011091C101209136 +:103D1000C2013091C301DC01CB01802B912BA22B7E +:103D2000B32B8093C0019093C101A093C201B093C3 +:103D3000C3011F910F910C94A91A0F931F93009127 +:103D4000C0011091C1012091C2013091C301DC0179 +:103D5000CB0180239123A223B3238093C0019093AE +:103D6000C101A093C201B093C3011F910F910C94A4 +:103D7000A91A0F931F930091C0011091C1012091C6 +:103D8000C2013091C301DC01CB0180279127A2271A +:103D9000B3278093C0019093C101A093C201B09357 +:103DA000C3011F910F910C94A91A1092BC0110929B +:103DB000BD011092BE011092BF010C94A91A41E0FE +:103DC00050E060E070E004C0440F551F661F771F8D +:103DD0008A95D2F74093BC015093BD016093BE0118 +:103DE0007093BF010C94A91A41E050E060E070E0CC +:103DF00004C0440F551F661F771F8A95D2F7809124 +:103E0000BC019091BD01A091BE01B091BF01482BB2 +:103E1000592B6A2B7B2B4093BC015093BD016093BF +:103E2000BE017093BF010C94A91A41E050E060E01C +:103E300070E004C0440F551F661F771F8A95D2F7A4 +:103E400040955095609570958091BC019091BD0111 +:103E5000A091BE01B091BF01482359236A237B235F +:103E60004093BC015093BD016093BE017093BF01AC +:103E70000C94A91A41E050E060E070E004C0440FE7 +:103E8000551F661F771F8A95D2F78091BC019091CC +:103E9000BD01A091BE01B091BF01482759276A27F3 +:103EA0007B274093BC015093BD016093BE0170938A +:103EB000BF010C94A91A0F931F930091BC0110919C +:103EC000BD012091BE013091BF01DC01CB01802BEF +:103ED000912BA22BB32B8093BC019093BD01A09397 +:103EE000BE01B093BF011F910F910C94A91A0F93BB +:103EF0001F930091BC011091BD012091BE01309132 +:103F0000BF01DC01CB0180239123A223B323809343 +:103F1000BC019093BD01A093BE01B093BF011F915E +:103F20000F910C94A91A0F931F930091BC0110914B +:103F3000BD012091BE013091BF01DC01CB01802782 +:103F40009127A227B3278093BC019093BD01A09332 +:103F5000BE01B093BF011F910F910C94A91A08954F +:103F6000CF92DF92EF92FF920F931F93CF93DF9345 +:103F70008C01C090C001D090C101E090C201F090CE +:103F8000C3014091BC015091BD016091BE0170918F +:103F9000BF01C42AD52AE62AF72ACFE1D0E0D7010B +:103FA000C6010C2E04C0B695A795979587950A94DF +:103FB000D2F780FF07C0B8018C2F0E94DA0B813046 +:103FC000910531F4219758F7B80180E00E94DA0B8F +:103FD000DF91CF911F910F91FF90EF90DF90CF90E5 +:103FE000089590910C01992321F090910D01911168 +:103FF00009C020910E0130910F01F90132969FEF17 +:1040000040E030C0982F9695969596959F30A0F4F5 +:10401000E0910E01F0910F01E90FF11D877021E091 +:1040200030E0A90102C0440F551F8A95E2F7CA018A +:104030009181892B818308959091D70190FF23C0AE +:104040001F928F9387ED95E09F938F930E94EB07CC +:104050000F900F900F900F9008959F3F39F04F5F92 +:104060004E3041F051915813F8CF0DC05111F7CF98 +:10407000942FF5CF9F3F39F0F901E90FF11D97FD1E +:10408000FA9582830895089590910C01992321F067 +:1040900090910D01911109C020910E0130910F01F5 +:1040A000F9013296205F3F4F30C0982F9695969534 +:1040B00096959F30A8F4E0910E01F0910F01E90F61 +:1040C000F11D877021E030E0A90102C0440F551FA7 +:1040D0008A95E2F7CA0180959181892381830895A9 +:1040E0009091D70190FF16C01F928F9389EB95E0B6 +:1040F0009F938F930E94EB070F900F900F900F905C +:1041000008953196E217F30729F090819813F9CFBB +:104110001082F7CF089581E090E0E0910E01F091D8 +:104120000F01E80FF91F1082019680319105A9F760 +:1041300008959091D601892B8093D601089580959A +:104140009091D60189238093D60108951092D601CB +:1041500008959091D501892B8093D501089580957C +:104160009091D50189238093D50108951092D501AE +:1041700008958093C40108951092C4010895809118 +:104180000E0190910F01FC0131969C01205F3F4F81 +:1041900080E0919191118F5FE217F307D1F70895B5 +:1041A000E0910E01F0910F018091D6018083E091A2 +:1041B0000E01F0910F0190818091D501892B8083B0 +:1041C0008091C401882361F0E0910E01F0910F010C +:1041D0009081892B80830E94BF2081111092C4019D +:1041E00080910E0190910F010C94EB1490933B0180 +:1041F00080933A010895CF92DF92EF92FF926C0183 +:10420000EE24FF24C114D104E104F10421F0C7011C +:10421000B60120E101C020E0C72ED82EE92EFF24F0 +:10422000C114D104E104F10419F0285FC701B601FB +:104230006B017C0154E0F694E794D794C7945A95A7 +:10424000D1F7C114D104E104F10419F02C5FC701C6 +:10425000B6016B017C0142E0F694E794D794C794D1 +:104260004A95D1F7C114D104E104F10419F02E5F8D +:10427000C701B601DC01CB01B695A7959795879547 +:10428000892B8A2B8B2B09F02F5F822FFF90EF90C9 +:10429000DF90CF9008958295982F9C7C392F36958A +:1042A0003695282F237344E0249FC0011124932FB7 +:1042B000982B292F2A7A2695892F8575880F822B8E +:1042C00008951F93CF93DF931F92CDB7DEB79983E5 +:1042D0000E944B21182F9981892F0E944B21212F59 +:1042E00030E0322F2227A901482BCA010F90DF911D +:1042F000CF911F9108958091F001843009F11092BF +:10430000D80120E488E190E00FB6F894A895809356 +:1043100060000FBE2093600083B7817F846083BFFD +:1043200083B7816083BF7894889583B78E7F83BF7E +:1043300088E10FB6F89480936000109260000FBE81 +:10434000089508950895CF930E94A1210E947F09A6 +:104350000E94A221C0E08C2F0E94AB0A811104C0F0 +:10436000CF5FCE30C1F701C081E0CF9108950C94AA +:10437000BB1A82E084BD93E095BD9AEF97BD809310 +:104380006E0008952FB7F8948091D9019091DA01C9 +:10439000A091DB01B091DC012FBF0895CF92DF9295 +:1043A000EF92FF920F931F932FB7F8944091D9018A +:1043B0005091DA016091DB017091DC012FBF6A013D +:1043C0007B01EE24FF248C0120E030E0C016D106F2 +:1043D000E206F30610F4415051099A01281B390BEB +:1043E000C9011F910F91FF90EF90DF90CF9008953A +:1043F0001F920F920FB60F9211248F939F93AF933A +:10440000BF938091D9019091DA01A091DB01B09125 +:10441000DC010196A11DB11D8093D9019093DA01B1 +:10442000A093DB01B093DC01BF91AF919F918F917D +:104430000F900FBE0F901F9018950E94DD11F894F9 +:104440002FEF87EA91E6215080409040E1F700C0CD +:10445000000087E090EBDC018093F9019093FA0172 +:10446000A093FB01B093FC019CE088E10FB6F894A7 +:10447000A895809360000FBE90936000FFCFEF92ED +:10448000FF920F931F93CF93DF93D82FC0E08C2F11 +:104490000E94AB0A00E010E0E82EF12CC701002ECC +:1044A00002C0959587950A94E2F780FD06C00F5FDC +:1044B0001F4F0630110591F709C0602F7C2F80E057 +:1044C0000E94B80BD813F3CF81E004C0CF5FCE3089 +:1044D000F1F680E0DF91CF911F910F91FF90EF9067 +:1044E0000895CF93C82F8CE20E943F22882321F0A9 +:1044F0008C2FCF910C943F2280E0CF910895CF93E1 +:104500000E94CE23811102C00E94B4238CEF95E05B +:104510000E945207C5E6C15049F00E947F098FE30F +:104520009CE90197F1F700C00000F5CF85EF95E019 +:104530000E94520789E20E947122811113C18AE20E +:104540000E94712281110E94B42385E00E94712291 +:1045500081110E941D220E94D9238093D70187E0F8 +:104560000E9471228823A9F18BE10E947122882385 +:1045700051F08091D70181FB222720F991E0922709 +:1045800090FB81F90EC08EE00E947122882361F0B9 +:104590008091D70182FB222720F991E0922790FB9E +:1045A00082F98093D70115C080E10E947122909119 +:1045B000D701882341F093FB222720F981E082274D +:1045C00080FB93F904C0892F809580FB90F990932C +:1045D000D7018091D7010E94DD230E94EB238093B5 +:1045E000EA0180EE0E947122882341F08091EA0165 +:1045F000982F909590FB80F98093EA0189E30E94BF +:104600007122882359F08091EA0181FB222720F949 +:1046100091E0922790FB81F98093EA0182EE0E945B +:104620007122882359F08091EA0182FB222720F928 +:1046300091E0922790FB82F98093EA0186EE0E9436 +:104640007122882359F08091EA0183FB222720F907 +:1046500091E0922790FB83F98093EA0183EE0E9418 +:104660007122882359F08091EA0184FB222720F9E6 +:1046700091E0922790FB84F98093EA0185E30E9400 +:104680007122882359F08091EA0185FB222720F9C5 +:1046900091E0922790FB85F98093EA0181E30E94E3 +:1046A0007122882359F08091EA0186FB222720F9A4 +:1046B00091E0922790FB86F98093EA0181E10E94C4 +:1046C0007122882359F08091EA0187FB222720F983 +:1046D00091E0922790FB87F98093EA018091EA01AB +:1046E0000E94EF238091EA0187FB882780F980935D +:1046F0000D0187E20E947122C82F8EE10E94712273 +:104700008111C2608FE10E9471228111C46080E238 +:104710000E9471228111C86081E20E947122811180 +:10472000C06182E20E9471228111C06283E20E9414 +:1047300071228111C06484E20E947122882311F0E9 +:10474000C06802C0CC2329F08C2F0E94E6236C2F76 +:1047500003C00E94E223682F70E080E090E0CF91D8 +:104760000C94771ECF9108956DEE7EEF80E090E07F +:104770000E94B72D60E082E090E00E94A92D60E0E9 +:1047800083E090E00E94A92D60E084E090E00E9428 +:10479000A92D60E085E090E00C94A92D80E090E0E8 +:1047A0000E94A32D21E08D3E9E4F09F020E0822F34 +:1047B000089582E090E00C949B2D682F82E090E0B9 +:1047C0000C94A92D83E090E00C949B2D682F83E03E +:1047D00090E00C94A92D84E090E00C949B2D682F20 +:1047E00084E090E00C94A92D8091DF0180FF0BC044 +:1047F0006091130185E0689FB0011124759567955C +:10480000759567952BC081FF09C06091130185E004 +:10481000689FB00111247595679520C082FF07C07D +:104820006091130185E0689FB001112417C0909139 +:10483000E0019923D1F060911201961788F7209139 +:10484000130185E0289F90011124929FA001939F5E +:10485000500D112470E0CA010E946D2D6038710561 +:1048600040F46115710539F002C065E070E0862FF3 +:1048700008958FE7089581E008958091DF0180FF1A +:1048800008C06091110170E0759567957595679501 +:1048900021C081FF06C06091110170E07595679598 +:1048A00019C082FF04C06091110170E010C09091A6 +:1048B000E0019923C1F0609110019617A0F7809153 +:1048C0001101899FC001112470E00E946D2D603894 +:1048D000710528F46115710521F0862F08958FE781 +:1048E000089581E0089561E070E0F4CF803F21F405 +:1048F0000E94F423819504C0813F29F40E94F4238F +:104900008093E3010895823F21F40E94F42381956E +:1049100004C0833F29F40E94F4238093E2010895A8 +:10492000893F19F40E943D2405C08A3F31F40E945A +:104930003D2481958093E40108958B3F21F40E94EA +:104940003D24819504C08C3F29F40E943D2480932E +:10495000E5010895843F21F48091E101816017C051 +:10496000853F21F48091E101826011C0863F21F4EE +:104970008091E10184600BC0873F21F48091E101C7 +:10498000886005C0883F31F48091E10180618093A7 +:10499000E10108958D3F21F48091DF0181600BC01A +:1049A0008E3F21F48091DF01826005C08F3F29F4A2 +:1049B0008091DF0184608093DF010895803F39F4A6 +:1049C0008091E30187FF6CC01092E30169C0813FD1 +:1049D00029F48091E3011816BCF362C09091E201C2 +:1049E000823F29F497FF5CC01092E20159C0833FD7 +:1049F00019F41916CCF354C0893F41F48091E401B5 +:104A000018160CF04DC01092E4014AC08A3F29F4F8 +:104A10008091E40187FF44C0F6CF8B3F39F4809149 +:104A2000E50187FF3DC01092E5013AC08C3F29F4B3 +:104A30008091E5011816BCF333C0843F21F48091C6 +:104A4000E1018E7F17C0853F21F48091E1018D7FC8 +:104A500011C0863F21F48091E1018B7F0BC0873F1D +:104A600021F48091E101877F05C0883F31F4809176 +:104A7000E1018F7E8093E10113C08D3F21F480918D +:104A8000DF018E7F0BC08E3F21F48091DF018D7F8F +:104A900005C08F3F29F48091DF018B7F8093DF0178 +:104AA0008091E20181110EC08091E30181110AC061 +:104AB0008091E401811106C08091E501811102C05D +:104AC0001092E00108958091D70183FF7EC088E3B2 +:104AD00096E00E9452078091E1011F928F9383E339 +:104AE00096E09F938F930E94EB0781E396E00E94EC +:104AF00052078091E201282F332727FD30953F93FD +:104B00008F938EE296E09F938F930E94EB078CE247 +:104B100096E00E9452078091E301282F332727FD5A +:104B200030953F938F9389E296E09F938F930E94F5 +:104B3000EB0787E296E00E9452078091E401282F5C +:104B4000332727FD30953F938F9384E296E09F9320 +:104B50008F930E94EB0782E296E00E9452078091B9 +:104B6000E501282F332727FD30953F938F938FE161 +:104B700096E09F938F930E94EB078CE196E00E9452 +:104B800052078091E0011F928F9389E196E09F93F5 +:104B90008F930E94EB0787E196E00E945207809175 +:104BA000DF011F928F9384E196E09F938F930E9481 +:104BB000EB0781E196E00E9452078DB79EB74C96B5 +:104BC0000FB6F8949EBF0FBE8DBF81EE91E00E949C +:104BD00034150E94C2219093DE018093DD01089577 +:104BE0001F93CF93DF938091DD019091DE010E94AE +:104BF000CE21AC019091E001992321F02091140184 +:104C000030E006C0209115018AE0289F9001112410 +:104C10004217530708F486C08091E201C091E30176 +:104C2000D091E4011091E501811107C0C11176C056 +:104C3000D11174C0111172C075C09F3F19F09F5FF0 +:104C40009093E001181624F40E94F4238093E2016B +:104C50008091E20187FF05C00E94F4238195809333 +:104C6000E2011C1624F40E94F4238093E301809156 +:104C7000E30187FF05C00E94F42381958093E3013F +:104C80006091E201662339F1C091E301CC2319F16F +:104C9000772767FD7095872F972F0E94722C23E34B +:104CA00033E343E35FE30E94D62C0E943F2C6093E2 +:104CB000E2016C2F772767FD7095872F972F0E9451 +:104CC000722C23E333E343E35FE30E94D62C0E947C +:104CD0003F2C6093E3011D1624F40E943D24809331 +:104CE000E4018091E40187FF05C00E943D24819585 +:104CF0008093E401111624F40E943D248093E50181 +:104D00008091E50187FF05C00E943D248195809335 +:104D1000E501DF91CF911F910C9463259F3F09F02E +:104D20008ECF96CFDF91CF911F910895E1EEF1E004 +:104D300085E0DF011D928A95E9F71092E00110925B +:104D4000DF0108958BE598E00E9452071F9281E0F1 +:104D50008F931F9285E08F938DE098E09F938F93C0 +:104D60000E94EB070F900F900F900F900F900F90F5 +:104D700008958330E9F128F4813061F0823009F13F +:104D80000895853009F462C008F449C0863009F4FA +:104D900074C0089580911501262F30E0280F311D31 +:104DA0002F3F310524F4680F6093150103C08FEF86 +:104DB00080931501809115011F928F9386E497E0EF +:104DC00072C080911401262F30E0280F311D2F3F33 +:104DD000310524F4680F6093140103C08FEF8093B2 +:104DE0001401809114011F928F9384E397E05BC0BC +:104DF00080911301262F30E0280F311D2F3F310500 +:104E000024F4680F6093130103C08FEF80931301A4 +:104E1000809113011F928F9381E297E044C08091AB +:104E20001201262F30E0280F311D2F3F310524F4C9 +:104E3000680F6093120103C08FEF8093120180917D +:104E400012011F928F938CE097E02DC08091110189 +:104E5000262F30E0280F311D2F3F310524F4680F35 +:104E60006093110103C08FEF8093110180911101B4 +:104E70001F928F9383EF96E016C080911001262F2A +:104E800030E0280F311D2F3F310524F4680F609367 +:104E9000100103C08FEF80931001809110011F92C9 +:104EA0008F9388ED96E09F938F930E94EB070F906E +:104EB0000F900F900F900895833081F128F4813086 +:104EC00059F08230D1F00895853009F449C0B8F125 +:104ED000863009F456C0089580911501681720F4B2 +:104EE000861B8093150102C0109215018091150157 +:104EF0001F928F9389EC96E054C08091140168173B +:104F000020F4861B8093140102C01092140180913A +:104F100014011F928F9387EB96E043C08091130199 +:104F2000681720F4861B8093130102C010921301AE +:104F3000809113011F928F9384EA96E032C0809192 +:104F40001201681720F4861B8093120102C0109290 +:104F50001201809112011F928F938FE896E021C079 +:104F600080911101681720F4861B8093110102C003 +:104F700010921101809111011F928F9386E796E0A4 +:104F800010C080911001681720F4861B80931001D7 +:104F900002C010921001809110011F928F938BE537 +:104FA00096E09F938F930E94EB070F900F900F90C6 +:104FB0000F900895CF93C82F1F928F9380E699E0AA +:104FC0009F938F930E94EB0781E090E0A0E0B0E018 +:104FD000BC01CD0104C0660F771F881F991FCA95B9 +:104FE000D2F70E94771E0F900F900F900F90CF91E5 +:104FF0000C94BB1ACF938D3109F465C0B0F58E3097 +:1050000009F4CCC100F5873009F49BC1A8F48630BF +:1050100009F06DC28091D701817F8E7F8093D70187 +:1050200085E699E00E94520781EA9DE00E945207BE +:1050300081E08093E70180C1883009F44FC08B3054 +:1050400009F47CC154C2863109F4F0C138F48031CE +:1050500009F4B8C1813109F430C249C2893109F477 +:10506000CEC18B3109F486C142C2853309F437C2FF +:1050700048F4873209F433C208F433C2893209F4A0 +:105080002EC235C2833438F48A3308F02CC28833F8 +:1050900009F454C12CC2833409F421C2883409F0C4 +:1050A00026C20E94BB1A80E99DE00E9452079FEF32 +:1050B00023ED80E3915020408040E1F700C00000E4 +:1050C0000E941D2239C180EB9DE00E9452070E9480 +:1050D000F92B0E94DF140E94110D2EC185EA9DE07C +:1050E0000E94520786E79BE00E9452070E94E2233B +:1050F0001F928F9383E79BE09F938F930E94EB0710 +:1051000081E79BE00E9452070E94D923C82F8EE5B9 +:105110009BE00E9452071F92CF9389E59BE09F93EB +:105120008F930E94EB0787E59BE00E9452078DE476 +:105130009BE00E9452078C2F81701F928F938AE40C +:105140009BE09F938F930E94EB0788E49BE00E9473 +:1051500052078EE39BE00E945207C1FB882780F92B +:105160001F928F938BE39BE09F938F930E94EB079B +:1051700089E39BE00E9452078DE29BE00E94520768 +:10518000C2FB882780F91F928F938AE29BE09F934E +:105190008F930E94EB0788E29BE00E9452078FE109 +:1051A0009BE00E945207C3FBCC27C0F91F92CF930C +:1051B0008CE19BE09F938F930E94EB078AE19BE039 +:1051C0000E9452070E94EB23C82F86E09BE00E94BA +:1051D00052071F92CF9381E09BE09F938F930E9491 +:1051E000EB078FEF9AE00E94520786EE9AE00E944A +:1051F00052078C2F81701F928F9383EE9AE09F93BA +:105200008F930E94EB078DB79EB780960FB6F894E8 +:105210009EBF0FBE8DBF81EE9AE00E9452078AECBE +:105220009AE00E945207C1FB882780F91F928F9352 +:1052300087EC9AE09F938F930E94EB0785EC9AE0AE +:105240000E94520783EB9AE00E945207C2FB882714 +:1052500080F91F928F9380EB9AE09F938F930E9427 +:10526000EB078EEA9AE00E9452078CE99AE00E94CE +:105270005207C3FB882780F91F928F9389E99AE030 +:105280009F938F930E94EB0787E99AE00E94520751 +:105290008DE89AE00E945207C4FB882780F91F928C +:1052A0008F938AE89AE09F938F930E94EB0788E898 +:1052B0009AE00E94520786E79AE00E945207C5FBD7 +:1052C000882780F91F928F9383E79AE09F938F93AB +:1052D0000E94EB0781E79AE00E94520785E59AE079 +:1052E0000E945207C6FB882780F91F928F9382E5A0 +:1052F0009AE09F938F930E94EB0780E59AE00E94CB +:10530000520788E49AE00E945207C7FBCC27C0F9F5 +:105310001F92CF9385E49AE09F938F930E94EB07AF +:1053200083E49AE00E9452078DB79EB74C960FB661 +:10533000F8949EBF0FBE8DBFC1E0DEC08CE899E03F +:105340005BC08091D701C82FC17080FF09C083E87E +:105350009DE00E9452078091D701817F8E7F47C0D8 +:1053600087E79DE00E9452078091D701816080937A +:10537000D701E2CF9091D70191FBCC27C0F981E012 +:10538000C827892FC0FB81F98093D701CC2319F05E +:105390008AE69DE027C08CE59DE02EC09091D70164 +:1053A00092FBCC27C0F981E0C827892FC0FB82F986 +:1053B0008093D701CC2319F08DE49DE013C08DE3D9 +:1053C0009DE01AC09091D70193FBCC27C0F981E0F2 +:1053D000C827892FC0FB83F98093D701CC2351F0D4 +:1053E00081E39DE00E9452078091D7018160809304 +:1053F000D70182C084E29DE00E9452079DCF85E1E3 +:105400009DE00E94520789EE9CE00E9452078CEAC0 +:105410009CE00E94520785E89CE00E94520781E4CC +:105420009CE00E94520786E19CE0E6CF88E09CE089 +:105430000E9452070E94DF141F928F938EEE9BE012 +:105440009F938F930E94EB0780910C011F928F9383 +:1054500087ED9BE09F938F930E94EB0780916E01F5 +:105460001F928F9384EC9BE09F938F930E94EB0796 +:1054700080910D011F928F9381EB9BE09F938F93FF +:105480000E94EB078091D9019091DA01A091DB0194 +:10549000B091DC01BF93AF939F938F938DE99BE015 +:1054A0009F938F930E94EB078DB79EB746960FB6DA +:1054B000F8949EBF0FBE8DBF3FCF0E94BB1AC09114 +:1054C0000D0181E0C827C0930D01CC2329F083E9A9 +:1054D0009BE00E94520710C088E89BE08DCF80E0DF +:1054E00003C08D5101C089530E94DA2725CF86E879 +:1054F0009BE00E945207C0E08C2FCF91089580E07E +:10550000089580E00895CF93C82F8091E7018130FE +:1055100081F020F0823009F44FC045C1E0910E01C6 +:10552000F0910F018081813169F0823209F03DC133 +:1055300009C0E0910E01F0910F018081813111F0DD +:10554000823261F48C2F0E947F2A811104C08C2F3B +:105550000E94FA272FC081E090E02CC08C2F0E947F +:10556000812A811126C0C431E1F070F4CB3081F082 +:10557000C031D1F40E94A22688E599E00E9452072A +:1055800082E08093E70115C0C93259F0C83361F455 +:1055900085E699E00E9452078CE599E00E94520747 +:1055A00008C01092E70103C186E599E00E94520706 +:1055B000FEC081E08170FDC0C43220F5CE3108F01C +:1055C000C0C0CB3099F1C8F4C73009F0D2C08AE02E +:1055D0008093150194E19093140193E0909313014B +:1055E0008093120188E08093110188E2809310017A +:1055F0008CEF97E00E945207BFC0C33149F1C4311C +:10560000C1F0B7C0CB3409F4A9C028F4C93289F07D +:10561000C83361F0AEC0C13509F49EC0C23509F48B +:1056200099C0CE3409F0A5C06AE09EC00E94A226AF +:10563000A3C08091E601882319F01092E6019CC076 +:1056400089E098E00E94520781E08093E701B1C0B1 +:1056500083EE97E00E94520781ED97E00E94520787 +:10566000809115011F928F938EEC97E09F938F93FB +:105670000E94EB078CEC97E00E9452078AEB97E0C0 +:105680000E945207809114011F928F9387EB97E03D +:105690009F938F930E94EB0785EB97E00E94520740 +:1056A00086EA97E00E945207809113011F928F9320 +:1056B00083EA97E09F938F930E94EB0781EA97E03C +:1056C0000E94520780E997E00E94520780911201E0 +:1056D0001F928F938DE897E09F938F930E94EB0723 +:1056E0008BE897E00E94520786E797E00E945207F6 +:1056F000809111011F928F9383E797E09F938F937F +:105700000E94EB0781E797E00E9452078AE597E045 +:105710000E945207809110011F928F9387E597E0B6 +:105720009F938F930E94EB0785E597E00E945207B5 +:105730008DB79EB748960FB6F8949EBF0FBE8DBF2B +:105740001BC0CE51EC2FF0E0E15DFE4F80818093D5 +:10575000E60112C061E003C061E006C06AE080912A +:10576000E6010E94B92608C08091E6010E945C27EC +:1057700003C08AEF97E013C08091E601882369F0A7 +:105780001F928F9384EF97E09F938F930E94EB0774 +:105790000F900F900F900F9004C081EF97E00E9440 +:1057A000520781E006C01092E70180E002C080E06D +:1057B00001CFCF910895E1E8F0E080818860808397 +:1057C0008081816080838FB7F89493E09093890003 +:1057D00090ED909388008FBF0895EFE6F0E0808110 +:1057E000826080830895EFE6F0E080818D7F808382 +:1057F0000895EFE6F0E0908182E0892780830895A4 +:105800001F920F920FB60F9211242F933F934F9335 +:105810005F936F937F938F939F93AF93BF93EF9318 +:10582000FF938091E8019091E90101969093E9013D +:105830008093E801811103C082E00E94110DE09184 +:10584000E901E695E695F0E0E054F24FE4918091AD +:10585000E8018E1303C080E00E94110DFF91EF91CB +:10586000BF91AF919F918F917F916F915F914F9178 +:105870003F912F910F900FBE0F901F90189504D05D +:105880006894B1118DC0089570D088F09F5790F042 +:10589000B92F9927B751A0F0D1F0660F771F881F55 +:1058A000991F1AF0BA95C9F712C0B13081F077D0BC +:1058B000B1E0089574C0672F782F8827B85F39F05A +:1058C000B93FCCF3869577956795B395D9F73EF4B4 +:1058D00090958095709561957F4F8F4F9F4F08955C +:1058E000E89409C097FB3EF490958095709561957A +:1058F0007F4F8F4F9F4F9923A9F0F92F96E9BB2730 +:105900009395F695879577956795B795F111F8CFAB +:10591000FAF4BB0F11F460FF1BC06F5F7F4F8F4F16 +:105920009F4F16C0882311F096E911C0772321F00C +:105930009EE8872F762F05C0662371F096E8862FA4 +:1059400070E060E02AF09A95660F771F881FDAF7FB +:10595000880F9695879597F9089557FD9058440FAD +:10596000551F59F05F3F71F04795880F97FB991FBE +:1059700061F09F3F79F0879508951216130614067B +:10598000551FF2CF4695F1DF08C016161706180608 +:10599000991FF1CF86957105610508940895E894E3 +:1059A000BB2766277727CB0197F908950BD078C0DE +:1059B00069D028F06ED018F0952309F05AC05FC066 +:1059C0001124EECFCADFA0F3959FD1F3950F50E0DD +:1059D000551F629FF001729FBB27F00DB11D639FA1 +:1059E000AA27F00DB11DAA1F649F6627B00DA11D47 +:1059F000661F829F2227B00DA11D621F739FB00DED +:105A0000A11D621F839FA00D611D221F749F33275C +:105A1000A00D611D231F849F600D211D822F762FF5 +:105A20006A2F11249F5750408AF0E1F088234AF0F2 +:105A3000EE0FFF1FBB1F661F771F881F915050403E +:105A4000A9F79E3F510570F014C0AACF5F3FECF359 +:105A5000983EDCF3869577956795B795F795E7952A +:105A60009F5FC1F7FE2B880F911D9695879597F93B +:105A7000089597F99F6780E870E060E008959FEFD0 +:105A800080EC089500240A941616170618060906D5 +:105A9000089500240A9412161306140605060895A4 +:105AA000092E0394000C11F4882352F0BB0F40F42C +:105AB000BF2B11F460FF04C06F5F7F4F8F4F9F4F6C +:105AC0000895991B79E004C0991F961708F0961B5A +:105AD000881F7A95C9F78095089597FB072E16F4CD +:105AE000009407D077FD09D00E94872D07FC05D0D0 +:105AF0003EF4909581959F4F0895709561957F4FE5 +:105B00000895EE0FFF1F0590F491E02D0994AA1B54 +:105B1000BB1B51E107C0AA1FBB1FA617B70710F098 +:105B2000A61BB70B881F991F5A95A9F780959095CA +:105B3000BC01CD010895F999FECF92BD81BDF89ABF +:105B4000992780B50895A8E1B0E042E050E00C94B8 +:105B5000BE2D262FF999FECF1FBA92BD81BD20BD63 +:105B60000FB6F894FA9AF99A0FBE019608950E941A +:105B7000A92D272F0C94AA2DDC01CB01FC01F9994A +:105B8000FECF06C0F2BDE1BDF89A319600B40D9289 +:0C5B900041505040B8F70895F894FFCF42 +:105B9C002002120D030EE00DAC0D780D0101C501B4 +:105BAC0028080A03140A3F4D3620394605F904C368 +:105BBC0004A3046A04DD03F6030F0428044804015B +:0A5BCC0002030405060708090000A3 +:00000001FF diff --git a/keyboard/ergodox_ez/keymaps/colemak/keymap.c b/keyboard/ergodox_ez/keymaps/colemak/keymap.c new file mode 100644 index 0000000000..ee72c42635 --- /dev/null +++ b/keyboard/ergodox_ez/keymaps/colemak/keymap.c @@ -0,0 +1,184 @@ +#include "ergodox_ez.h" +#include "debug.h" +#include "action_layer.h" + +#define BASE 0 // default layer +#define SYMB 1 // symbols +#define MDIA 2 // media keys + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { +/* Keymap 0: Basic layer + * + * ,--------------------------------------------------. ,--------------------------------------------------. + * | = | 1 | 2 | 3 | 4 | 5 | LEFT | | RIGHT| 6 | 7 | 8 | 9 | 0 | - | + * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| + * | Del | Q | W | F | P | G | L1 | | L1 | J | L | U | Y | ; | \ | + * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + * | BkSp | A | R | S | T | D |------| |------| H | N | E | I |O / L2| ' | + * |--------+------+------+------+------+------| Hyper| | Meh |------+------+------+------+------+--------| + * | LShift |Z/Ctrl| X | C | V | B | | | | K | M | , | . |//Ctrl| RShift | + * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' + * |Grv/L1| '" |AltShf| Left | Right| | Up | Down | [ | ] | ~L1 | + * `----------------------------------' `----------------------------------' + * ,-------------. ,-------------. + * | App | LGui | | Alt |Ctrl/Esc| + * ,------|------|------| |------+--------+------. + * | | | Home | | PgUp | | | + * | Space|Backsp|------| |------| Tab |Enter | + * | |ace | End | | PgDn | | | + * `--------------------' `----------------------' + */ +// If it accepts an argument (i.e, is a function), it doesn't need KC_. +// Otherwise, it needs KC_* +[BASE] = KEYMAP( // layer 0 : default + // left hand + KC_EQL, KC_1, KC_2, KC_3, KC_4, KC_5, KC_LEFT, + KC_DELT, KC_Q, KC_W, KC_F, KC_P, KC_G, TG(SYMB), + KC_BSPC, KC_A, KC_R, KC_S, KC_T, KC_D, + KC_LSFT, CTL_T(KC_Z), KC_X, KC_C, KC_V, KC_B, ALL_T(KC_NO), + LT(SYMB,KC_GRV),KC_QUOT, LALT(KC_LSFT), KC_LEFT,KC_RGHT, + ALT_T(KC_APP), KC_LGUI, + KC_HOME, + KC_SPC,KC_BSPC,KC_END, + // right hand + KC_RGHT, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, + TG(SYMB), KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_BSLS, + KC_H, KC_N, KC_E, KC_I, LT(MDIA, KC_O), KC_QUOT, + MEH_T(KC_NO),KC_K, KC_M, KC_COMM,KC_DOT, CTL_T(KC_SLSH), KC_RSFT, + KC_UP, KC_DOWN,KC_LBRC,KC_RBRC, KC_FN1, + KC_LALT, CTL_T(KC_ESC), + KC_PGUP, + KC_PGDN,KC_TAB, KC_ENT + ), +/* Keymap 1: Symbol Layer + * + * ,--------------------------------------------------. ,--------------------------------------------------. + * | | F1 | F2 | F3 | F4 | F5 | | | | F6 | F7 | F8 | F9 | F10 | F11 | + * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| + * | | ! | @ | { | } | | | | | | Up | 7 | 8 | 9 | * | F12 | + * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + * | | # | $ | ( | ) | ` |------| |------| Down | 4 | 5 | 6 | + | | + * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + * | | % | ^ | [ | ] | ~ | | | | & | 1 | 2 | 3 | \ | | + * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' + * | | | | | | | | . | 0 | = | | + * `----------------------------------' `----------------------------------' + * ,-------------. ,-------------. + * | | | | | | + * ,------|------|------| |------+------+------. + * | | | | | | | | + * | | |------| |------| | | + * | | | | | | | | + * `--------------------' `--------------------' + */ +// SYMBOLS +[SYMB] = KEYMAP( + // left hand + KC_TRNS,KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_TRNS, + KC_TRNS,KC_EXLM,KC_AT, KC_LCBR,KC_RCBR,KC_PIPE,KC_TRNS, + KC_TRNS,KC_HASH,KC_DLR, KC_LPRN,KC_RPRN,KC_GRV, + KC_TRNS,KC_PERC,KC_CIRC,KC_LBRC,KC_RBRC,KC_TILD,KC_TRNS, + KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS, + KC_TRNS,KC_TRNS, + KC_TRNS, + KC_TRNS,KC_TRNS,KC_TRNS, + // right hand + KC_TRNS, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, + KC_TRNS, KC_UP, KC_7, KC_8, KC_9, KC_ASTR, KC_F12, + KC_DOWN, KC_4, KC_5, KC_6, KC_PLUS, KC_TRNS, + KC_TRNS, KC_AMPR, KC_1, KC_2, KC_3, KC_BSLS, KC_TRNS, + KC_TRNS,KC_DOT, KC_0, KC_EQL, KC_TRNS, + KC_TRNS, KC_TRNS, + KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS +), +/* Keymap 2: Media and mouse keys + * + * ,--------------------------------------------------. ,--------------------------------------------------. + * | | | | | | | | | | | | | | | | + * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| + * | | | | MsUp | | | | | | | | | | | | + * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + * | | |MsLeft|MsDown|MsRght| |------| |------| | | | | | Play | + * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + * | | | | | | | | | | | | Prev | Next | | | + * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' + * | | | | Lclk | Rclk | |VolUp |VolDn | Mute | | | + * `----------------------------------' `----------------------------------' + * ,-------------. ,-------------. + * | | | | | | + * ,------|------|------| |------+------+------. + * | | | | | | |Brwser| + * | | |------| |------| |Back | + * | | | | | | | | + * `--------------------' `--------------------' + */ +// MEDIA AND MOUSE +[MDIA] = KEYMAP( + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_MS_U, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_MS_L, KC_MS_D, KC_MS_R, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_BTN1, KC_BTN2, + KC_TRNS, KC_TRNS, + KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, + // right hand + 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_MPLY, + KC_TRNS, KC_TRNS, KC_TRNS, KC_MPRV, KC_MNXT, KC_TRNS, KC_TRNS, + KC_VOLU, KC_VOLD, KC_MUTE, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, + KC_TRNS, + KC_TRNS, KC_TRNS, KC_WBAK +), +}; + +const uint16_t PROGMEM fn_actions[] = { + [1] = ACTION_LAYER_TAP_TOGGLE(SYMB) // FN1 - Momentary Layer 1 (Symbols) +}; + +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; +}; + +// 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/keyboard/ergodox_ez/keymaps/colemak/readme.md b/keyboard/ergodox_ez/keymaps/colemak/readme.md new file mode 100644 index 0000000000..e28b2f0856 --- /dev/null +++ b/keyboard/ergodox_ez/keymaps/colemak/readme.md @@ -0,0 +1,4 @@ +# ErgoDox EZ Colemak Configuration + +Colemak layout with same layers as default ergodox ez keymap. + -- cgit v1.2.3 From e5f84058bb6884e0c2d024a1f2e64436395cbd60 Mon Sep 17 00:00:00 2001 From: Didier Loiseau Date: Sat, 23 Jan 2016 16:59:33 +0100 Subject: Implemented new folders structure. moved keymap_typematrix.c to tm2030/keymap.c --- keyboard/ergodox_ez/keymaps/keymap_typematrix.c | 282 ------------------------ keyboard/ergodox_ez/keymaps/tm2030/keymap.c | 282 ++++++++++++++++++++++++ 2 files changed, 282 insertions(+), 282 deletions(-) delete mode 100644 keyboard/ergodox_ez/keymaps/keymap_typematrix.c create mode 100644 keyboard/ergodox_ez/keymaps/tm2030/keymap.c (limited to 'keyboard') diff --git a/keyboard/ergodox_ez/keymaps/keymap_typematrix.c b/keyboard/ergodox_ez/keymaps/keymap_typematrix.c deleted file mode 100644 index 931170c387..0000000000 --- a/keyboard/ergodox_ez/keymaps/keymap_typematrix.c +++ /dev/null @@ -1,282 +0,0 @@ -/* TypeMatrix-2030-like keymap - * --------------------------- - * Currently supported features: - * Layer 0: default layer close to the TM with the following differences: - * - top row and rightmost column are removed, corresponding keys are displaced, except app-keys which are removed - * - bottom-left keys are reorganized on a single roz as: Ctrl, "Fn", Gui, Play, App/Alt - * - "shuffle" and "desktop" are not supported - * - right-shift is moved on ' and \ - * - right-ctrl is moved on End - * - ] is moved in place of the dash (-) - * - dash (-) and = are moved on bottom right row - * - arrows and PgUp/PgDn are moved on the thumbs - * Layer 1: same as Layer 0 but with Dvorak layout, to use with QWERTY OS layout. - * Enable Dvorak layout with Magic-1 (LShift-RShift-1), disable with Magic-0. - * Layer 8: numbers layer close to the TM when toggling "num" with the following differences: - * - numpad is displaced by 1 to the top left - * - arrows are displaced by 1 to the left - * - provides access to F1-F12, caps lock and num lock - * Layer 9: "fn" layer ("fn" key toggles both layers 1 & 2) with the following differences: - * - VolUp & VolDn are only on left hand to keep access to arrows on right hand - * LEDs: - * - left (1st) led is used to indicate the numbers layer - * - middle (2nd) led is used to indicate Dvorak layout - * - right (3rd) led is used to indicate caps-lock - */ -#include "ergodox_ez.h" -#include "debug.h" -#include "action_layer.h" -#include "led.h" - -#define BASE 0 // default layer -#define DVRK 1 // Dvorak layer -#define NMBR 8 // numbers layer -#define FNLR 9 // fn layer - -#define MDBL0 1 -#define MFNLR 2 -#define MCUT 3 -#define MCOPY 4 -#define MPSTE 5 - -const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { -/* Basic layer - * - * ,--------------------------------------------------. ,--------------------------------------------------. - * | ` | 1 | 2 | 3 | 4 | 5 | Del | | Del | 6 | 7 | 8 | 9 | 0 | ] | - * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| - * | Tab | Q | W | E | R | T |Backsp| |Backsp| Y | U | I | O | P | [ | - * |--------+------+------+------+------+------|ace | |ace |------+------+------+------+------+--------| - * | LShift | A | S | D | F | G |------| |------| H | J | K | L | ; | '/Shift| - * |--------+------+------+------+------+------|Enter | |Enter |------+------+------+------+------+--------| - * | LShift | Z | X | C | V | B | | | | N | M | , | . | / | \/Shift| - * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' - * |LCtrl | fn | LGui | Play |App/Alt| | RAlt | - | Home | = |End/Ctl| - * `-----------------------------------' `-----------------------------------' - * ,--------------. ,-------------. - * |Esc/Alt| num | | Left |Right | - * ,------+-------+------| |------+------+------. - * | | | PgUp | | Up | | | - * |Space |LShift |------| |------|RShift|Space | - * | | | PgDn | | Down | | | - * `---------------------' `--------------------' - */ -// If it accepts an argument (i.e, is a function), it doesn't need KC_. -// Otherwise, it needs KC_* -[BASE] = KEYMAP( // layer 0 : default - // left hand - KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_DELT, - KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_BSPC, - KC_LSFT, KC_A, KC_S, KC_D, KC_F, KC_G, - KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_ENT, - KC_LCTL, M(MFNLR), KC_LGUI,KC_MPLY,ALT_T(KC_APP), - - ALT_T(KC_ESC), TG(NMBR), - KC_PGUP, - KC_SPC, KC_LSFT, KC_PGDN, - - // right hand - KC_DELT, KC_6, KC_7, KC_8, KC_9, KC_0, KC_RBRC, - KC_BSPC, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, - KC_H, KC_J, KC_K, KC_L, KC_SCLN, SFT_T(KC_QUOT), - KC_ENT, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, SFT_T(KC_BSLS), - KC_RALT, KC_MINS, KC_HOME, KC_EQL, CTL_T(KC_END), - - KC_LEFT, KC_RGHT, - KC_UP, - KC_DOWN, KC_RSFT, KC_SPC - ), -/* Dvorak layer - * - * ,--------------------------------------------------. ,--------------------------------------------------. - * | ` | 1 | 2 | 3 | 4 | 5 | Del | | Del | 6 | 7 | 8 | 9 | 0 | = | - * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| - * | Tab | ' | , | . | P | Y |Backsp| |Backsp| F | G | C | R | L | / | - * |--------+------+------+------+------+------|ace | |ace |------+------+------+------+------+--------| - * | LShift | A | O | E | U | I |------| |------| D | H | T | N | S | -/Shift| - * |--------+------+------+------+------+------|Enter | |Enter |------+------+------+------+------+--------| - * | LShift | ; | Q | J | K | X | | | | B | M | W | V | Z | \/Shift| - * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' - * |LCtrl | fn | LGui | Play |App/Alt| | RAlt | [ | Home | ] |End/Ctl| - * `-----------------------------------' `-----------------------------------' - * ,--------------. ,-------------. - * |Esc/Alt| num | | Left |Right | - * ,------+-------+------| |------+------+------. - * | | | PgUp | | Up | | | - * |Space |LShift |------| |------|RShift|Space | - * | | | PgDn | | Down | | | - * `---------------------' `--------------------' - */ -// If it accepts an argument (i.e, is a function), it doesn't need KC_. -// Otherwise, it needs KC_* -[DVRK] = KEYMAP( // layer 0 : default - // left hand - KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_DELT, - KC_TAB, KC_QUOT, KC_COMM, KC_DOT, KC_P, KC_Y, KC_BSPC, - KC_LSFT, KC_A, KC_O, KC_E, KC_U, KC_I, - KC_LSFT, KC_SCLN, KC_Q, KC_J, KC_K, KC_X, KC_ENT, - KC_LCTL, M(MFNLR), KC_LGUI, KC_MPLY, ALT_T(KC_APP), - - ALT_T(KC_ESC), TG(NMBR), - KC_PGUP, - KC_SPC, KC_LSFT, KC_PGDN, - - // right hand - KC_DELT, KC_6, KC_7, KC_8, KC_9, KC_0, KC_EQL, - KC_BSPC, KC_F, KC_G, KC_C, KC_R, KC_L, KC_SLSH, - KC_D, KC_H, KC_T, KC_N, KC_S, SFT_T(KC_MINS), - KC_ENT, KC_B, KC_M, KC_W, KC_V, KC_Z, SFT_T(KC_BSLS), - KC_RALT, KC_LBRC, KC_HOME, KC_RBRC, CTL_T(KC_END), - - KC_LEFT, KC_RGHT, - KC_UP, - KC_DOWN, KC_RSFT, KC_SPC - ), -/* Numbers Layer - * - * ,--------------------------------------------------. ,--------------------------------------------------. - * | | F1 | F2 | F3 | F4 | F5 | | | | | | Tab | / | * | - | - * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| - * | | F6 | F7 | F8 | F9 | F10 | | | | | Home | 7 | 8 | 9 | + | - * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| - * | | F11 | F12 | | | |------| |------| Up | End | 4 | 5 | 6 | + | - * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| - * | | | | | | | | | Left | Down | Right| 1 | 2 | 3 |KpEnter | - * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' - * | | | | | | | | 0 | 00 | . |Etr/Ctl| - * `----------------------------------' `-----------------------------------' - * ,-------------. ,-------------. - * | | | |n.lock|c.lock| - * ,------|------|------| |------+------+------. - * | | | | | | | | - * | | |------| |------| | | - * | | | | | | | | - * `--------------------' `--------------------' - */ -// SYMBOLS -[NMBR] = KEYMAP( - // left hand - KC_TRNS, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_TRNS, - KC_TRNS, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_TRNS, - KC_TRNS, KC_F11, KC_F12, 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, - // right hand - KC_INS, KC_F6, KC_F7, KC_TAB, KC_PSLS, KC_PAST, KC_PMNS, - KC_TRNS, KC_TRNS, KC_HOME, KC_P7, KC_P8, KC_P9, KC_PPLS, - KC_UP, KC_END, KC_P4, KC_P5, KC_P6, KC_PPLS, - KC_LEFT, KC_DOWN, KC_RGHT, KC_P1, KC_P2, KC_P3, KC_PENT, - KC_TRNS, KC_P0, M(MDBL0),KC_PDOT, CTL_T(KC_PENT), - - KC_NLCK, KC_CAPS, - KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS -), -/* fn layer - * - * ,--------------------------------------------------. ,--------------------------------------------------. - * | | | | | | |Insert| |Insert|Eject |Power |Sleep | Wake |PrtScr|ScrollLk| - * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| - * | | | | | | |VolUp | | | | | | | | Pause | - * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| - * | | | | | | |------| |------| | | | | | | - * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| - * | | | cut | copy |paste | Mute |VolDn | | | | | | | | | - * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' - * | | | | | | | | | | | | - * `----------------------------------' `----------------------------------' - * ,-------------. ,-------------. - * | | | | | | - * ,------|------|------| |------+------+------. - * | | | | | Next | | | - * | Mute | |------| |------| | | - * | | | | | Prev | | | - * `--------------------' `--------------------' - */ -// MEDIA AND MOUSE -[FNLR] = KEYMAP( - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_INS, - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_VOLU, - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, M(MCUT), M(MCOPY), M(MPSTE), KC_MUTE, KC_VOLD, - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - - KC_TRNS, KC_TRNS, - KC_TRNS, - KC_MUTE, KC_TRNS, KC_TRNS, - // right hand - KC_INS, KC_EJCT, KC_PWR, KC_SLEP, KC_WAKE, KC_PSCR, KC_SLCK, - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_PAUS, - 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_MPRV, - KC_MNXT, KC_TRNS, KC_TRNS -), -}; - -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 MDBL0: - if (record->event.pressed) { - return MACRO( I(25), T(P0), T(P0), END ); - } - break; - case MFNLR: - layer_state ^= (1 << NMBR) | (1 << FNLR); - break; - case MCUT: - if (record->event.pressed) { - return MACRO(D(LSFT), T(DELT), U(LSFT), END); - } - break; - case MCOPY: - if (record->event.pressed) { - return MACRO(D(LCTL), T(INS), U(LCTL), END); - } - break; - case MPSTE: - if (record->event.pressed) { - return MACRO(D(LSFT), T(INS), U(LSFT), END); - } - break; - } - return MACRO_NONE; -}; - -// 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) { - - ergodox_board_led_off(); - ergodox_right_led_1_off(); - ergodox_right_led_2_off(); - ergodox_right_led_3_off(); - // led 1: numbers layer - if (layer_state & (1 << NMBR)) { - ergodox_right_led_1_on(); - } - // led 2: Dvorak layer - if (default_layer_state == 1 << DVRK) { - ergodox_right_led_2_on(); - } - // led 3: caps lock - if (host_keyboard_leds() & (1<event.pressed) { + return MACRO( I(25), T(P0), T(P0), END ); + } + break; + case MFNLR: + layer_state ^= (1 << NMBR) | (1 << FNLR); + break; + case MCUT: + if (record->event.pressed) { + return MACRO(D(LSFT), T(DELT), U(LSFT), END); + } + break; + case MCOPY: + if (record->event.pressed) { + return MACRO(D(LCTL), T(INS), U(LCTL), END); + } + break; + case MPSTE: + if (record->event.pressed) { + return MACRO(D(LSFT), T(INS), U(LSFT), END); + } + break; + } + return MACRO_NONE; +}; + +// 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) { + + ergodox_board_led_off(); + ergodox_right_led_1_off(); + ergodox_right_led_2_off(); + ergodox_right_led_3_off(); + // led 1: numbers layer + if (layer_state & (1 << NMBR)) { + ergodox_right_led_1_on(); + } + // led 2: Dvorak layer + if (default_layer_state == 1 << DVRK) { + ergodox_right_led_2_on(); + } + // led 3: caps lock + if (host_keyboard_leds() & (1< Date: Sat, 23 Jan 2016 18:04:45 +0100 Subject: Renamed "Numbers Layer" to "Numeric Layer" --- keyboard/ergodox_ez/keymaps/tm2030/keymap.c | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) (limited to 'keyboard') diff --git a/keyboard/ergodox_ez/keymaps/tm2030/keymap.c b/keyboard/ergodox_ez/keymaps/tm2030/keymap.c index 931170c387..31005b64d0 100644 --- a/keyboard/ergodox_ez/keymaps/tm2030/keymap.c +++ b/keyboard/ergodox_ez/keymaps/tm2030/keymap.c @@ -12,14 +12,14 @@ * - arrows and PgUp/PgDn are moved on the thumbs * Layer 1: same as Layer 0 but with Dvorak layout, to use with QWERTY OS layout. * Enable Dvorak layout with Magic-1 (LShift-RShift-1), disable with Magic-0. - * Layer 8: numbers layer close to the TM when toggling "num" with the following differences: + * Layer 8: numeric layer close to the TM when toggling "num" with the following differences: * - numpad is displaced by 1 to the top left * - arrows are displaced by 1 to the left * - provides access to F1-F12, caps lock and num lock * Layer 9: "fn" layer ("fn" key toggles both layers 1 & 2) with the following differences: * - VolUp & VolDn are only on left hand to keep access to arrows on right hand * LEDs: - * - left (1st) led is used to indicate the numbers layer + * - left (1st) led is used to indicate the numeric layer * - middle (2nd) led is used to indicate Dvorak layout * - right (3rd) led is used to indicate caps-lock */ @@ -30,7 +30,7 @@ #define BASE 0 // default layer #define DVRK 1 // Dvorak layer -#define NMBR 8 // numbers layer +#define NUMR 8 // numeric layer #define FNLR 9 // fn layer #define MDBL0 1 @@ -71,7 +71,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_ENT, KC_LCTL, M(MFNLR), KC_LGUI,KC_MPLY,ALT_T(KC_APP), - ALT_T(KC_ESC), TG(NMBR), + ALT_T(KC_ESC), TG(NUMR), KC_PGUP, KC_SPC, KC_LSFT, KC_PGDN, @@ -117,7 +117,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { KC_LSFT, KC_SCLN, KC_Q, KC_J, KC_K, KC_X, KC_ENT, KC_LCTL, M(MFNLR), KC_LGUI, KC_MPLY, ALT_T(KC_APP), - ALT_T(KC_ESC), TG(NMBR), + ALT_T(KC_ESC), TG(NUMR), KC_PGUP, KC_SPC, KC_LSFT, KC_PGDN, @@ -132,7 +132,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { KC_UP, KC_DOWN, KC_RSFT, KC_SPC ), -/* Numbers Layer +/* Numeric Layer * * ,--------------------------------------------------. ,--------------------------------------------------. * | | F1 | F2 | F3 | F4 | F5 | | | | | | Tab | / | * | - | @@ -154,7 +154,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * `--------------------' `--------------------' */ // SYMBOLS -[NMBR] = KEYMAP( +[NUMR] = KEYMAP( // left hand KC_TRNS, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_TRNS, KC_TRNS, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_TRNS, @@ -234,7 +234,7 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) } break; case MFNLR: - layer_state ^= (1 << NMBR) | (1 << FNLR); + layer_state ^= (1 << NUMR) | (1 << FNLR); break; case MCUT: if (record->event.pressed) { @@ -267,8 +267,8 @@ void * matrix_scan_user(void) { ergodox_right_led_1_off(); ergodox_right_led_2_off(); ergodox_right_led_3_off(); - // led 1: numbers layer - if (layer_state & (1 << NMBR)) { + // led 1: numeric layer + if (layer_state & (1 << NUMR)) { ergodox_right_led_1_on(); } // led 2: Dvorak layer -- cgit v1.2.3 From 96b9089d9f4237c2d4e4760181628fc96c4f93b6 Mon Sep 17 00:00:00 2001 From: Didier Loiseau Date: Sat, 23 Jan 2016 18:15:21 +0100 Subject: Added Calculator, Mail and Browser Home application keys. --- keyboard/ergodox_ez/keymaps/tm2030/keymap.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'keyboard') diff --git a/keyboard/ergodox_ez/keymaps/tm2030/keymap.c b/keyboard/ergodox_ez/keymaps/tm2030/keymap.c index 31005b64d0..00d6a4bfa4 100644 --- a/keyboard/ergodox_ez/keymaps/tm2030/keymap.c +++ b/keyboard/ergodox_ez/keymaps/tm2030/keymap.c @@ -2,7 +2,7 @@ * --------------------------- * Currently supported features: * Layer 0: default layer close to the TM with the following differences: - * - top row and rightmost column are removed, corresponding keys are displaced, except app-keys which are removed + * - top row and rightmost column are removed, corresponding keys are displaced * - bottom-left keys are reorganized on a single roz as: Ctrl, "Fn", Gui, Play, App/Alt * - "shuffle" and "desktop" are not supported * - right-shift is moved on ' and \ @@ -183,7 +183,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| * | | | | | | |VolUp | | | | | | | | Pause | * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| - * | | | | | | |------| |------| | | | | | | + * | | | | Calc | Mail |Browsr|------| |------| | | | | | | * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| * | | | cut | copy |paste | Mute |VolDn | | | | | | | | | * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' @@ -201,7 +201,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { [FNLR] = KEYMAP( KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_INS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_VOLU, - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_CALC, KC_MAIL, KC_WHOM, KC_TRNS, KC_TRNS, M(MCUT), M(MCOPY), M(MPSTE), KC_MUTE, KC_VOLD, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, -- cgit v1.2.3 From 294bd256150e381d3eac619a6eab1877eb95728f Mon Sep 17 00:00:00 2001 From: Didier Loiseau Date: Sat, 23 Jan 2016 18:52:16 +0100 Subject: Moved layout description to README.md and added more details --- keyboard/ergodox_ez/keymaps/tm2030/README.md | 133 +++++++++++++++++++++++++++ keyboard/ergodox_ez/keymaps/tm2030/keymap.c | 26 +----- 2 files changed, 134 insertions(+), 25 deletions(-) create mode 100644 keyboard/ergodox_ez/keymaps/tm2030/README.md (limited to 'keyboard') diff --git a/keyboard/ergodox_ez/keymaps/tm2030/README.md b/keyboard/ergodox_ez/keymaps/tm2030/README.md new file mode 100644 index 0000000000..55942709be --- /dev/null +++ b/keyboard/ergodox_ez/keymaps/tm2030/README.md @@ -0,0 +1,133 @@ +# TypeMatrix™ 2030 inspired layout + +This is a [TypeMatrix™ 2030](http://typematrix.com/2030/features.php) inspired layout for the ErgoDox EZ. The _TypeMatrix_ is a nice small ergonomic keyboard with a matrix layout, and it provides several nice features like `enter`, `backspace` and `delete` at the center, bigger `shift` keys and international `cut`, `copy` and `paste` keys. + +The idea in this ErgoDox layout is to make it is as close as possible to the TM2030, such that it would be easy to switch between the TM and the ErgoDox. No _fancy_ features have been implemented, as this is intended to be a base for further customization if desired. Some keys have been duplicated in order to accomodate for most people. + +Most of the TM2030 features are supported except +* automatic window switching (alt-tab key, at the left of the space key) +* show desktop key (at the right of the space key) +* 102/106 modes + +Dvorak mode is even supported by pressing [`Magic`](/TMK_README.md#magic-commands)+`1` (`Magic` is by default `LShift`+`RShift`) + +Some keys had to be moved around to fit into the ErgoDox, especially the `F1`-`F12` keys and the arrow keys. + +## Base Layer +This is the default layer, close to the TM with the following differences: +- Top row (with the `F`-keys) and rightmost column (with application shortcuts) are removed, the corresponding keys are displaced elsewhere. +- Bottom-left keys are reorganized on a single row as: `Ctrl`, `fn`, `Gui`, `Play`, `App`/`Alt`. +- `shuffle` and `desktop` are not supported. +- `right-shift` is moved on `'`, `\` and on the right thumb (the latter is actually the only _true_ `right-shift`, and must be used in the `Magic` key combination). +- `right-ctrl` is moved on `End`. +- `]` is moved in place of the dash (`-`). +- Dash (`-`) and `=` are moved on bottom right row. +- Arrows and `PgUp`/`PgDn` are moved on the thumbs. + + ,--------------------------------------------------. ,--------------------------------------------------. + | ` | 1 | 2 | 3 | 4 | 5 | Del | | Del | 6 | 7 | 8 | 9 | 0 | ] | + |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| + | Tab | Q | W | E | R | T |Backsp| |Backsp| Y | U | I | O | P | [ | + |--------+------+------+------+------+------|ace | |ace |------+------+------+------+------+--------| + | LShift | A | S | D | F | G |------| |------| H | J | K | L | ; | '/Shift| + |--------+------+------+------+------+------|Enter | |Enter |------+------+------+------+------+--------| + | LShift | Z | X | C | V | B | | | | N | M | , | . | / | \/Shift| + `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' + |LCtrl | fn | LGui | Play |App/Alt| | RAlt | - | Home | = |End/Ctl| + `-----------------------------------' `-----------------------------------' + ,--------------. ,-------------. + |Esc/Alt| num | | Left |Right | + ,------+-------+------| |------+------+------. + | | | PgUp | | Up | | | + |Space |LShift |------| |------|RShift|Space | + | | | PgDn | | Down | | | + `---------------------' `--------------------' + + +### Layer Switching +- Use `num` to toggle the Numeric Layer. +- Hold `fn` to temporarily activate the Numeric & Fn Layers +As on the original TM 2030, when `num` layer is activated, holding `fn` disables it but enables the other `fn` keys. + +## Dvorak Layer +Same as Layer 0 but with _Dvorak_ layout, to use with QWERTY OS layout. + +Enable Dvorak layout with [`Magic`](/TMK_README.md#magic-commands+`1` (`LShift`+`RShift`+`1`), disable with `Magic`-`0`. + +The middle (green) led indicates when the Dvorak layer is activated. + + ,--------------------------------------------------. ,--------------------------------------------------. + | ` | 1 | 2 | 3 | 4 | 5 | Del | | Del | 6 | 7 | 8 | 9 | 0 | = | + |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| + | Tab | ' | , | . | P | Y |Backsp| |Backsp| F | G | C | R | L | / | + |--------+------+------+------+------+------|ace | |ace |------+------+------+------+------+--------| + | LShift | A | O | E | U | I |------| |------| D | H | T | N | S | -/Shift| + |--------+------+------+------+------+------|Enter | |Enter |------+------+------+------+------+--------| + | LShift | ; | Q | J | K | X | | | | B | M | W | V | Z | \/Shift| + `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' + |LCtrl | fn | LGui | Play |App/Alt| | RAlt | [ | Home | ] |End/Ctl| + `-----------------------------------' `-----------------------------------' + ,--------------. ,-------------. + |Esc/Alt| num | | Left |Right | + ,------+-------+------| |------+------+------. + | | | PgUp | | Up | | | + |Space |LShift |------| |------|RShift|Space | + | | | PgDn | | Down | | | + `---------------------' `--------------------' + +## Numeric Layer +Numeric layer close to the TM when toggling `num`, with the following differences: + +- Numpad is displaced by 1 to the top left. +- Arrows are displaced by 1 to the left. +- Provides access to `F1`-`F12`, `caps-lock` and `num-lock`. + +The numeric layer is indicated with the left (red) led. Caps-lock is indicated with the right (blue) led. + + ,--------------------------------------------------. ,--------------------------------------------------. + | | F1 | F2 | F3 | F4 | F5 | | | | | | Tab | / | * | - | + |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| + | | F6 | F7 | F8 | F9 | F10 | | | | | Home | 7 | 8 | 9 | + | + |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + | | F11 | F12 | | | |------| |------| Up | End | 4 | 5 | 6 | + | + |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + | | | | | | | | | Left | Down | Right| 1 | 2 | 3 |KpEnter | + `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' + | | | | | | | | 0 | 00 | . |Etr/Ctl| + `----------------------------------' `-----------------------------------' + ,-------------. ,-------------. + | | | |n.lock|c.lock| + ,------|------|------| |------+------+------. + | | | | | | | | + | | |------| |------| | | + | | | | | | | | + `--------------------' `--------------------' + +## Fn Layer +Activated simultaneously with the Numeric layer when holding the `fn` key. As on the TM, it provides access to the following features: +- `cut`, `copy` and `paste` +- `volume up`, `volume down` and `mute` — as opposed to the TM, these are only on left hand +- `previous track` and `next track` +- `calculator`, `mail` and `browser home` +- `insert`, `power`, `sleep`, `wake`, `print screen`, `scroll-lock` and `pause` + +Note: the `eject` key does not work due to jackhumbert/qmk_firmware#82 + + ,--------------------------------------------------. ,--------------------------------------------------. + | | | | | | |Insert| |Insert|Eject |Power |Sleep | Wake |PrtScr|ScrollLk| + |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| + | | | | | | |VolUp | | | | | | | | Pause | + |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + | | | | | | |------| |------| | | | | | | + |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + | | | cut | copy |paste | Mute |VolDn | | | | | | | | | + `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' + | | | | | | | | | | | | + `----------------------------------' `----------------------------------' + ,-------------. ,-------------. + | | | | | | + ,------|------|------| |------+------+------. + | | | | | Next | | | + | Mute | |------| |------| | | + | | | | | Prev | | | + `--------------------' `--------------------' diff --git a/keyboard/ergodox_ez/keymaps/tm2030/keymap.c b/keyboard/ergodox_ez/keymaps/tm2030/keymap.c index 00d6a4bfa4..cbdf0ae00e 100644 --- a/keyboard/ergodox_ez/keymaps/tm2030/keymap.c +++ b/keyboard/ergodox_ez/keymaps/tm2030/keymap.c @@ -1,28 +1,4 @@ -/* TypeMatrix-2030-like keymap - * --------------------------- - * Currently supported features: - * Layer 0: default layer close to the TM with the following differences: - * - top row and rightmost column are removed, corresponding keys are displaced - * - bottom-left keys are reorganized on a single roz as: Ctrl, "Fn", Gui, Play, App/Alt - * - "shuffle" and "desktop" are not supported - * - right-shift is moved on ' and \ - * - right-ctrl is moved on End - * - ] is moved in place of the dash (-) - * - dash (-) and = are moved on bottom right row - * - arrows and PgUp/PgDn are moved on the thumbs - * Layer 1: same as Layer 0 but with Dvorak layout, to use with QWERTY OS layout. - * Enable Dvorak layout with Magic-1 (LShift-RShift-1), disable with Magic-0. - * Layer 8: numeric layer close to the TM when toggling "num" with the following differences: - * - numpad is displaced by 1 to the top left - * - arrows are displaced by 1 to the left - * - provides access to F1-F12, caps lock and num lock - * Layer 9: "fn" layer ("fn" key toggles both layers 1 & 2) with the following differences: - * - VolUp & VolDn are only on left hand to keep access to arrows on right hand - * LEDs: - * - left (1st) led is used to indicate the numeric layer - * - middle (2nd) led is used to indicate Dvorak layout - * - right (3rd) led is used to indicate caps-lock - */ +/* TypeMatrix-2030-like keymap */ #include "ergodox_ez.h" #include "debug.h" #include "action_layer.h" -- cgit v1.2.3 From b0d7d9d922ea5b432fcbb499df0881a2e80d5092 Mon Sep 17 00:00:00 2001 From: Didier Loiseau Date: Sat, 23 Jan 2016 18:59:06 +0100 Subject: Added keymap.hex --- keyboard/ergodox_ez/keymaps/tm2030/keymap.hex | 1544 +++++++++++++++++++++++++ 1 file changed, 1544 insertions(+) create mode 100644 keyboard/ergodox_ez/keymaps/tm2030/keymap.hex (limited to 'keyboard') diff --git a/keyboard/ergodox_ez/keymaps/tm2030/keymap.hex b/keyboard/ergodox_ez/keymaps/tm2030/keymap.hex new file mode 100644 index 0000000000..7e1118e3b2 --- /dev/null +++ b/keyboard/ergodox_ez/keymaps/tm2030/keymap.hex @@ -0,0 +1,1544 @@ +:100000000C9462090C94A6090C94A6090C94A609F8 +:100010000C94A6090C94A6090C94A6090C94A609A4 +:100020000C94A6090C94A6090C94F4140C94C6150F +:100030000C94A6090C94A6090C94A6090C94A60984 +:100040000C94A6090C94472E0C94A6090C94A609AE +:100050000C94A6090C944E240C94A6090C94A609A1 +:100060000C94A6090C94A6090C94A6090C94A60954 +:100070000C94A6090C94A6090C94A6090C94A60944 +:100080000C94A6090C94A6090C94A6090C94A60934 +:100090000C94A6090C94A6090C94A6090C94A60924 +:1000A0000C94A6090C94A6090C94A6092B164D16BF +:1000B00038174D1638178F16B216381707171A1734 +:1000C000681A681A961A961AD81A141B141D141D49 +:1000D0002C1B141D231C231CEE1C141D141D021D9F +:1000E00001E10149024902E10001E001490249023E +:1000F000E00001E1014C024C02E1007519016202CD +:1001000062016202620035002B00E100E100E000C4 +:1001100000001E00140004001D0002304E001F00ED +:100120001A0016001B00E300E10020000800070091 +:100130000600AE002C0021001500090019006574AE +:100140004B00220017000A000500000029744C0033 +:100150002A0000002800000008544C002A0000007B +:1001600028000000500023001C000B0011000000BC +:100170004F00240018000D001000E600520025007A +:100180000C000E0036002D002C00260012000F007F +:1001900037004A00E50027001300330038002E0026 +:1001A000510030002F00347231724D710000350063 +:1001B0002B00E100E100E00000001E00340004001C +:1001C000330002304E001F00360012001400E3001E +:1001D000E1002000370008000D00AE002C002100D7 +:1001E000130018000E0065744B0022001C000C0068 +:1001F0001B00000029744C002A00000028000000A9 +:1002000008544C002A000000280000005000230081 +:1002100009000700050000004F0024000A000B0041 +:100220001000E60052002500060017001A002F00FB +:100230002C0026001500110019004A00E5002700D7 +:100240000F0016001D00300051002E0038002D72E6 +:1002500031724D710000000000000000000000003D +:10026000000000000000000000000000000000008E +:10027000000000000000000000000000000000007E +:10028000000000000000000000000000000000006E +:10029000000000000000000000000000000000005E +:1002A000000000000000000000000000000000004E +:1002B000000000000000000000000000000000003E +:1002C000000000000000000000000000000000002E +:1002D000000000000000000000000000000000001E +:1002E000000000000000000000000000000000000E +:1002F00000000000000000000000000000000000FE +:1003000000000000000000000000000000000000ED +:1003100000000000000000000000000000000000DD +:1003200000000000000000000000000000000000CD +:1003300000000000000000000000000000000000BD +:1003400000000000000000000000000000000000AD +:10035000000000000000000000000000000000009D +:10036000000000000000000000000000000000008D +:10037000000000000000000000000000000000007D +:10038000000000000000000000000000000000006D +:10039000000000000000000000000000000000005D +:1003A000000000000000000000000000000000004D +:1003B000000000000000000000000000000000003D +:1003C000000000000000000000000000000000002D +:1003D000000000000000000000000000000000001D +:1003E000000000000000000000000000000000000D +:1003F00000000000000000000000000000000000FD +:1004000000000000000000000000000000000000EC +:1004100000000000000000000000000000000000DC +:1004200000000000000000000000000000000000CC +:1004300000000000000000000000000000000000BC +:1004400000000000000000000000000000000000AC +:10045000000000000000000000000000000000009C +:10046000000000000000000000000000000000008C +:10047000000000000000000000000000000000007C +:10048000000000000000000000000000000000006C +:10049000000000000000000000000000000000005C +:1004A000000000000000000000000000000000004C +:1004B000000000000000000000000000000000003C +:1004C000000000000000000000000000000000002C +:1004D000000000000000000000000000000000001C +:1004E000000000000000000000000000000000000C +:1004F00000000000000000000000000000000000FC +:1005000000000000000000000000000000000000EB +:1005100000000000000000000000000000000000DB +:1005200000000000000000000000000000000000CB +:1005300000000000000000000000000000000000BB +:1005400000000000000000000000000000000000AB +:10055000000000000000000000000000000000009B +:10056000000000000000000000000000000000008B +:10057000000000000000000000000000000000007B +:10058000000000000000000000000000000000006B +:10059000000000000000000000000000000000005B +:1005A000000000000000000000000000000000004B +:1005B000000000000000000000000000000000003B +:1005C000000000000000000000000000000000002B +:1005D000000000000000000000000000000000001B +:1005E000000000000000000000000000000000000B +:1005F00000000000000000000000000000000000FB +:1006000000000000000000000000000000000000EA +:1006100000000000000000000000000000000000DA +:1006200000000000000000000000000000000000CA +:1006300000000000000000000000000000000000BA +:1006400000000000000001000100010001000100A5 +:1006500000003A003F0044000100010001003B009F +:10066000400045000100010001003C004100010084 +:100670000100010001003D004200010001000100F5 +:1006800001003E00430001000100000001000100E4 +:10069000010000000100000001004900010000000D +:1006A0005000000053003F000100520051000000C4 +:1006B000390040004A004D004F00010001002B00AE +:1006C0005F005C00590062000100540060005D00A2 +:1006D0005A0001300100550061005E005B006300BC +:1006E00001005600570057005800587100000100E3 +:1006F00001000100010001000000010001000100F3 +:1007000001000100010001000100010003300100AF +:10071000010001000100B20004300100A800010046 +:100720000100B10005300100010001000100B50029 +:10073000A800000001004900A9000000AA00000074 +:100740000100490001000000010000000100B000AC +:1007500001000100010000000100A50001000100EE +:1007600001000100AC00A600010001000100010031 +:100770000100A70001000100010001000100460086 +:100780000100010001000100AB004700480001002A +:100790000100010000000A002530313662003A20D5 +:1007A0000025303258000A722F6320303132333442 +:1007B00035363738394142434445460A000A002558 +:1007C00030325800626F756E6365213A20006C65A7 +:1007D000667420736964652061747461636865641C +:1007E0000A006C6566742073696465206E6F7420FE +:1007F000726573706F6E64696E670A0074727969EE +:100800006E6720746F207265736574206D6370323B +:10081000333031380A000A44454255473A20656E64 +:1008200061626C65642E0A005B735D004B657962E2 +:100830006F6172642073746172742E0A005B575D7D +:10084000005B535D005B525D005B445D005B435D9C +:100850000016034500720067006F0044006F0078C7 +:1008600000200045005A0000001603450072006792 +:10087000006F0044006F007800200045005A00001F +:10088000000403090409028D00050100A0FA09040F +:1008900000000103010100092111010001223F00B4 +:1008A0000705810308000A09040100010301020091 +:1008B000092111010001224D000705820308000AE9 +:1008C00009040200010300000009211101000122B6 +:1008D00036000705830308000A0904030002030029 +:1008E00000000921110100012220000705840320D6 +:1008F00000010705040320000109040400010300AE +:1009000000000921110100012239000705850310AB +:1009100000011201100100000008EDFE07130100A4 +:100920000102000105010906A101050719E029E7F7 +:100930001500250195087501810205081901290591 +:10094000950575019102950175039101050719003F +:10095000297715002501957875018102C00631FFC0 +:100960000974A1010975150025FF952075088102FC +:100970000976150025FF952075089102C00501092B +:1009800080A101850216010026B7001A01002AB7CE +:1009900000751095018100C0050C0901A1018503B6 +:1009A000160100269C021A01002A9C02751095016E +:1009B0008100C005010902A1010901A10005091971 +:1009C000012905150025019505750181029501751F +:1009D0000381010501093009311581257F950275D3 +:1009E00008810609381581257F950175088106055E +:1009F0000C0A38021581257F950175088106C0C053 +:100A000005010906A101050719E029E715002501DF +:100A10009508750181029501750881010508190184 +:100A20002905950575019102950175039101050749 +:100A3000190029FF150025FF950675088100C00AD9 +:100A4000002530325820006B6579626F6172645FF7 +:100A50007265706F72743A20000A002530325800B7 +:100A60006B6579626F6172645F7365745F6C6564F6 +:100A70003A200064656C5F6B65795F6269743A2047 +:100A800063616E27742064656C3A20253032580A01 +:100A9000006164645F6B65795F6269743A206361C9 +:100AA0006E2774206164643A20253032580A00644D +:100AB0006F6E652E0A00626F6F676D6167696320F4 +:100AC0007363616E3A202E2E2E2000290A002575B0 +:100AD000002F002575005D28002564002000256496 +:100AE00000200025640020002564007C00253032B1 +:100AF00058006D6F7573656B6579205B62746E7CF1 +:100B0000782079207620685D287265702F61636C8B +:100B1000293A205B006D6B5F776865656C5F74696F +:100B20006D655F746F5F6D6178203D2025640A00FC +:100B30006D6B5F776865656C5F6D61785F7370651D +:100B40006564203D2025640A006D6B5F74696D65E6 +:100B50005F746F5F6D6178203D2025640A006D6BC6 +:100B60005F6D61785F7370656564203D2025640A60 +:100B7000006D6B5F696E74657276616C203D202537 +:100B8000640A006D6B5F64656C6179203D202564AB +:100B90000A006D6B5F776865656C5F74696D655F92 +:100BA000746F5F6D6178203D2025640A006D6B5F76 +:100BB000776865656C5F6D61785F737065656420EB +:100BC0003D2025640A006D6B5F74696D655F746F0D +:100BD0005F6D6178203D2025640A006D6B5F6D615B +:100BE000785F7370656564203D2025640A006D6B35 +:100BF0005F696E74657276616C203D2025640A0021 +:100C00006D6B5F64656C6179203D2025640A000A84 +:100C100000257500363A20776865656C5F74696DEC +:100C2000655F746F5F6D61783A20000A002575007A +:100C3000353A20776865656C5F6D61785F737065C4 +:100C400065643A20000A00257500343A2074696D05 +:100C5000655F746F5F6D61783A20000A002575004A +:100C6000333A206D61785F73706565643A20000ADD +:100C700000257500323A20696E74657276616C28C1 +:100C80006D73293A20000A00257500313A20646509 +:100C90006C6179282A31306D73293A20000A092DB8 +:100CA0002056616C756573202D0A004D3E004D2560 +:100CB000643E20003F007365742064656661756C56 +:100CC000740A00433E200077686572652064656C95 +:100CD00074613A20637572736F723D25642C2077BE +:100CE0006865656C3D25640A536565206874747099 +:100CF0003A2F2F656E2E77696B6970656469612E76 +:100D00006F72672F77696B692F4D6F7573655F6BB6 +:100D10006579730A000A092D204D6F7573656B653F +:100D200079202D0A4553432F713A09717569740A68 +:100D3000313A0964656C6179282A31306D73290A6A +:100D4000323A09696E74657276616C286D73290A8E +:100D5000333A096D61785F73706565640A343A09E6 +:100D600074696D655F746F5F6D61780A353A0977F4 +:100D70006865656C5F6D61785F73706565640A3680 +:100D80003A09776865656C5F74696D655F746F5F5C +:100D90006D61780A0A703A097072696E7420766122 +:100DA0006C7565730A643A097365742064656661DD +:100DB000756C74730A75703A092B310A646F776E1B +:100DC0003A092D310A706775703A092B31300A7073 +:100DD00067646F776E3A092D31300A0A7370656562 +:100DE00064203D2064656C7461202A206D61785F09 +:100DF0007370656564202A202872657065617420AF +:100E00002F2074696D655F746F5F6D6178290A00CA +:100E10003F004D3E2000433E20004C25640A000A5E +:100E2000092D20436F6E736F6C65202D0A45534367 +:100E30002F713A09717569740A6D3A096D6F75738E +:100E4000656B65790A000A092D204D616769632089 +:100E50002D0A643A0964656275670A783A0964651F +:100E6000627567206D61747269780A6B3A0964650E +:100E7000627567206B6579626F6172640A6D3A0909 +:100E80006465627567206D6F7573650A763A0976D9 +:100E9000657273696F6E0A733A097374617475735E +:100EA0000A633A09636F6E736F6C65206D6F6465DA +:100EB0000A302D343A096C61796572302D34284638 +:100EC00031302D4634290A506175733A09626F6FCB +:100ED000746C6F616465720A653A09656570726F5A +:100EE0006D0A6E3A094E4B524F0A7A3A09736C6595 +:100EF0006570204C454420746573740A000A00250F +:100F000075002E6E6B726F3A20000A002575002E58 +:100F1000737761705F6261636B736C6173685F624A +:100F200061636B73706163653A20000A0025750088 +:100F30002E737761705F67726176655F6573633A80 +:100F400020000A002575002E6E6F5F6775693A20D4 +:100F5000000A002575002E737761705F72616C74F2 +:100F60005F726775693A20000A002575002E737755 +:100F700061705F6C616C745F6C6775693A20000A20 +:100F8000002575002E636170736C6F636B5F746F07 +:100F90005F636F6E74726F6C3A20000A00257500F3 +:100FA0002E737761705F636F6E74726F6C5F6361D5 +:100FB00070736C6F636B3A20000A00253032580062 +:100FC0006B65796D61705F636F6E6669672E7261C4 +:100FD000773A20000A002575002E6D6F7573653A0B +:100FE00020000A002575002E6B6579626F617264BE +:100FF0003A20000A002575002E6D61747269783AF6 +:1010000020000A002575002E656E61626C653A202D +:10101000000A00253032580064656275675F636FAF +:101020006E6669672E7261773A20000A00257500A6 +:1010300064656661756C745F6C617965723A2000F5 +:101040003F004E4B524F3A206F66660A004E4B529D +:101050004F3A206F6E0A0074696D65725F636F7539 +:101060006E743A202530346C580A006B6579626FD3 +:101070006172645F6E6B726F3A2025580A006B656F +:1010800079626F6172645F69646C653A2025580A01 +:10109000006B6579626F6172645F70726F746F6309 +:1010A0006F6C3A2025580A00686F73745F6B65791E +:1010B000626F6172645F6C65647328293A202558F9 +:1010C0000A000A092D20537461747573202D0A00DB +:1010D0004743433A20342E382E31204156522D4C6E +:1010E0004942433A20312E382E3073766E204156D5 +:1010F000525F415243483A20617672350A004F50A0 +:1011000054494F4E533A204C55464120424F4F547C +:101110004D41474943204D4F5553454B4559204577 +:10112000585452414B455920434F4E534F4C452044 +:10113000434F4D4D414E44204E4B524F203531329E +:101140000A004255494C443A2065356638343035FA +:101150002D6469727479202831373A34363A33393C +:10116000204A616E2032332032303136290A00564F +:1011700049443A20307846454544284572676F44D3 +:101180006F7820455A29205049443A20307831332D +:101190003037284572676F446F7820455A292056AA +:1011A00045523A203078303030310A0044455343BC +:1011B0003A20742E6D2E6B2E206B6579626F6172F2 +:1011C00064206669726D7761726520666F72204572 +:1011D00072676F646F780A000A092D205665727372 +:1011E000696F6E202D0A000A6D6F7573653A206F66 +:1011F00066660A000A6D6F7573653A206F6E0A00A5 +:101200000A6B6579626F6172643A206F66660A00E4 +:101210000A6B6579626F6172643A206F6E0A000A28 +:101220006D61747269783A206F66660A000A6D61B2 +:10123000747269783A206F6E0A000A646562756795 +:101240003A206F6E0A000A64656275673A206F661D +:10125000660A000A0A626F6F746C6F616465722EB1 +:101260002E2E2000433E20006565636F6E66696721 +:101270003A0A00536C656570204C454420746573D0 +:10128000740A0000000000000000000000000102DD +:1012900004060A0F17202C3A4A5D71879DB3C7DAFE +:1012A000E9F5FCFFFCF5E9DAC7B39D87715D4A3AC1 +:1012B0002C20170F0A0604020100000000000000A5 +:1012C0000000000011241FBECFEFDAE0DEBFCDBF6B +:1012D00004B603FE24C08091F9019091FA01A09117 +:1012E000FB01B091FC018730904BA740B04BB9F4A3 +:1012F0001092F9011092FA011092FB011092FC0178 +:1013000014BE84B7877F84BF88E10FB6F8948093BA +:101310006000109260000FBEE0E0FFE3099511E06D +:10132000A0E0B1E0EAE2F0E602C005900D92AA3337 +:10133000B107D9F721E0AAE3B1E001C01D92A93FAE +:10134000B207E1F70E942E120C9413300C940000A7 +:10135000FF93EF93E0913A01F0913B01309709F050 +:101360000995EF91FF910895FC018591803011F06E +:10137000EFDFFBCF0895FF27E0E230E247FF0CC02C +:10138000419597FF09C0EDE2609570958095909525 +:10139000611D711D811D911D27FF02C0219530E344 +:1013A00050E2AA27660F771F881F991FAA1FA4174C +:1013B00010F0A41B63955A95A9F7AA3008F0A95F0D +:1013C000A05DAF93F395611571058105910541F716 +:1013D000ED3211F4EF93F395F21718F43F93F39570 +:1013E000FBCF8F91B5DFFA95E1F70895E991F99177 +:1013F0008591803021F0853219F0AADFF9CF089568 +:1014000020E0E89455915532C1F3503311F46894BB +:1014100055915A3348F4505390F3220F022E220F65 +:10142000220F200D250FF4CF0EF42195899199916B +:10143000533619F3533729F1533559F1BC01882735 +:101440009927E8945C3621F4899199916894559193 +:10145000543639F446EF7EF077FF0DC08FEF9FEFE3 +:101460000AC055374AE039F0583540E121F052368C +:1014700042E009F00895FF93EF937DDFEF91FF9134 +:10148000B7CFFF93EF93FC0181918030B9F360DF18 +:10149000FBCFFF93EF9368DFF1CFDF93CF93CDB70F +:1014A000DEB72596A3DFCF91DF910895FC0163306D +:1014B00019F1B8F46130D1F0623081F58091BC014E +:1014C0009091BD01A091BE01B091BF0123E0922790 +:1014D0008093BC019093BD01A093BE01B093BF0166 +:1014E0001DC0643079F0653099F018C0828188237E +:1014F000A9F08BEF90E008958281882379F082EF44 +:1015000090E008958281882349F089EE90E0089563 +:101510008281882319F080EE90E0089580E090E0C9 +:101520000895089556985E9825982D9826982E9897 +:1015300027982F988091BC019091BD01A091BE0188 +:10154000B091BF0190FF02C0259A2D9A8091C001F1 +:101550009091C101A091C201B091C3010297A10570 +:10156000B10511F4269A2E9A0E94721781FF02C0CB +:10157000279A2F9A089582E99AE0892B11F00E9408 +:10158000920A80E090E0089556985E9825982D98EC +:1015900026982E9827982F988FEF90E090938900A7 +:1015A0008093880090938B0080938A0090938D00A5 +:1015B00080938C00259A2D9A2FEF80E792E021509E +:1015C00080409040E1F700C00000269A2E9A2FEF4D +:1015D00080E792E0215080409040E1F700C0000099 +:1015E000279A2F9A2FEF80E792E021508040904079 +:1015F000E1F700C0000025982D982FEF80E792E0DA +:10160000215080409040E1F700C0000026982E98BD +:101610002FEF80E792E0215080409040E1F700C03A +:10162000000027982F9856985E9825982D98269810 +:101630002E9827982F98089589EA8093800089E052 +:101640008093810024982C983F988AB18F748AB92E +:101650006E98479A8BB1806B8BB9769A0E94C40AB8 +:1016600081E99AE0892B11F00E94910A80E090E0D4 +:10167000089580E28093000180913C0181110EC0A9 +:101680000E94880B81E080933C012FEF83ED90E373 +:10169000215080409040E1F700C0000080E40E94AB +:1016A0008E0B8093000181112EC00E94B80B809395 +:1016B0000001811128C00E94B80B809300018111A4 +:1016C00022C08FE30E94B80B8093000181111BC0E0 +:1016D0000E94B00B80E40E948E0B80930001811168 +:1016E00012C08CE00E94B80B8093000181110BC0E6 +:1016F0000E94B80B80930001811105C08FE30E9406 +:10170000B80B809300010E94B00B809100010895F6 +:101710001092B9008AE08093B800089594EA9093FB +:10172000BC009091BC0097FFFCCF9091B900987FCE +:10173000983021F0903111F081E008958093BB0042 +:1017400084E88093BC008091BC0087FFFCCF80912F +:10175000B900887F883111F0803471F780E00895F6 +:1017600084E98093BC008091BC0084FDFCCF089587 +:101770008093BB0084E88093BC008091BC0087FF0D +:10178000FCCF9091B900987F81E0983209F480E015 +:10179000089584E88093BC008091BC0087FFFCCF53 +:1017A0008091BB00089580910001811115C080E4F3 +:1017B0000E948E0B8093000181110CC082E10E9477 +:1017C000B80B80930001811105C08FEF0E94B80B08 +:1017D000809300010E94B00B84B1807F84B985B1F1 +:1017E000807F85B98AB1837F8AB98BB1837F8BB9BA +:1017F0003E98469808950E94390B809300010E94FC +:10180000D30B80B38C7080BB81B3836F81BBECE45E +:10181000F1E0AEE3B1E011921D9281E0EA35F80704 +:10182000D1F78CE19BE0892B11F00C941C0B0895EF +:101830009F92AF92BF92CF92DF92EF92FF920F935F +:101840001F93CF93DF93809100018823E1F0809173 +:101850003D018F5F80933D01811115C08CEF97E0B2 +:101860000E94B4090E94390B80930001882329F05B +:1018700082EE97E00E94B40906C08EEC97E00E94C9 +:10188000B4090E94C40A0EE311E0C0E0D0E0BB241A +:10189000B39482E0A82ECC24C394D12C2FEBE22E5B +:1018A00027E0F22EC73000F580910001811162C05F +:1018B00080E40E948E0B80930001811112C082E1AE +:1018C0000E94B80B8093000181110BC0C6010C2E41 +:1018D00001C0880F0A94EAF780950E94B80B8093A4 +:1018E00000010E94B00B46C0CA30A1F028F4C830F5 +:1018F00059F0C93061F005C0CC3089F070F0CD30BE +:1019000089F0209A289810C0219A29980DC0229A0F +:101910002A980AC0239A2B9807C0529A01C0539A5A +:101920005B9802C03E9A4698E0EAEA95F1F78FB1DB +:10193000799985C092E081708B25892B7C9B02C0B0 +:1019400090E001C094E0892B7D9B02C090E001C033 +:1019500098E0892B7E9B02C090E001C090E1892B2A +:101960009FB19095991F9927991F9295990F907EF5 +:10197000892B10C080910001811176C080E40E9403 +:101980008E0B80930001882309F45BC0912C0E9488 +:10199000B00B892DF8019081981739F180838091DF +:1019A0000101882301F18091D70180FF04C084ECFC +:1019B00097E00E94B4098091D70180FF0CC080910C +:1019C00001011F928F93FF92EF920E944D0A0F9098 +:1019D0000F900F900F908091D70180FF04C08DEB86 +:1019E00097E00E94B409A09201010E94D30B2196B6 +:1019F0000F5F1F4FCE30D10509F054CF8091010108 +:101A00008823B1F0815080930101882339F08FE958 +:101A10009FE00197F1F700C000000AC0ACE4B1E01C +:101A2000EEE3F1E081918D9391E0EC34F907D1F789 +:101A30008BEB9AE0892BD1F00E94BB0A17C090E093 +:101A40007ACF83E10E94B80B8093000181119ECF71 +:101A500081E40E948E0B80930001811197CF0E9438 +:101A6000C90B982E909493CF80E094CF81E0DF91C2 +:101A7000CF911F910F91FF90EF90DF90CF90BF908B +:101A8000AF909F900895E82FF0E0E45BFE4F8081D7 +:101A90000895CF92DF92EF92FF920F931F93CF930F +:101AA000DF9386EA97E00E94B4093CE4E32E31E03C +:101AB000F32EC0E0D0E041EAC42E47E0D42E08E97E +:101AC00017E0DF93CF93DF92CF920E944D0A8EE909 +:101AD00097E00E94B409F70181917F0190E00E9494 +:101AE000B7239F938F931F930F930E944D0A86E90C +:101AF00097E00E94B40921968DB79EB708960FB65D +:101B0000F8949EBF0FBE8DBFCE30D105D1F6DF91C8 +:101B1000CF911F910F91FF90EF90DF90CF9008959C +:101B20008B3B910578F4883A910540F5853A91050B +:101B3000D0F48430910508F0B1C08130910509F4EA +:101B4000ADC06BC0803E910508F467C0883E91052A +:101B500008F4A4C09C01205F31092031310508F050 +:101B60005CC090650895853A910509F459C0863A9C +:101B7000910509F458C083E890E40895883A9105E6 +:101B800009F454C0893A910509F453C08A3A910581 +:101B900009F452C08B3A910509F451C08C3A910571 +:101BA00009F450C08D3A910509F44FC0803B91056E +:101BB00009F44EC08E3A910509F44DC08F3A910553 +:101BC00009F44CC0813B910509F44BC0823B91055F +:101BD00009F44AC0833B910509F449C0843B91054F +:101BE00009F448C0853B910509F447C0863B91053F +:101BF00009F446C0873B910509F445C0883B91052F +:101C000009F444C0893B910509F443C08A3B91051E +:101C100009F042C08AE296E4089580E090E00895D9 +:101C200081E890E4089582E890E4089582EE94E4D7 +:101C3000089589EE94E408958AEE94E4089585EB7E +:101C400094E4089586EB94E4089587EB94E4089572 +:101C50008CEC94E408958DEC94E4089583E895E485 +:101C600008958AE895E4089582E995E4089584E961 +:101C700095E4089581E296E4089583E296E4089558 +:101C800084E296E4089585E296E4089586E296E477 +:101C9000089587E296E4089580E094E40895089515 +:101CA00096E0799FF001112494E5899FE00DF11DE4 +:101CB0001124E60FF11DEE0FFF1FEA5FFE4F859125 +:101CC00094910895880F991F8A579040FC0185913F +:101CD00094910895880F991F8A5F9E4FFC0185910A +:101CE0009491089526E0729FF001112444E5849FA9 +:101CF000E00DF11D1124E60FF11DEE0FFF1FEA5F4D +:101D0000FE4F25913491C9019A9581159F4110F498 +:101D1000C9010895C90190528115904128F4C90163 +:101D20009F700E946A0E0895C901905381159041D9 +:101D300020F4C9019927906C0895211580E5380792 +:101D400069F40E94351D9FEF24E34CE09150204040 +:101D50004040E1F700C000000C947324213080E57E +:101D6000380751F486E198E00E94B4098091D701C8 +:101D700081608093D7010895C901905581159041E4 +:101D800008F050C0832F99278F70992781309105D3 +:101D9000D9F4A9014370552702C0880F991F4A95AD +:101DA000E2F79C68A90164E0440F551F6A95E1F7CA +:101DB00044275370842B952B73E0220F331F7A95A1 +:101DC000E1F7207633271DC08230910529F4922F48 +:101DD0008827816F906A089583309105A9F4A9013D +:101DE0004370552781E090E002C0880F991F4A9503 +:101DF000E2F79C6843E0220F331F4A95E1F7207E0B +:101E00003770822B932B08950497F1F4A901437046 +:101E1000552781E090E002C0880F991F4A95E2F7AC +:101E20009A68E8CFC90190578115904120F4C90103 +:101E30009F7090620895C90190588115904120F4D7 +:101E4000C9019F70906A0895203E3105E0F4203C5E +:101E5000310558F52133310509F470C048F42932B1 +:101E6000310509F464C02A32310509F46EC074C02A +:101E700029333105F1F022383105D9F02533310508 +:101E800009F44EC069C0233E310589F138F4203E83 +:101E90003105C1F0223E3105E1F05EC0263E31053C +:101EA00069F1273E3105A9F157C0C9010E94620EB0 +:101EB00008958091EA0180FD02C081FF4DC080EE4F +:101EC00090E04BC08091EA0180FFF9CF89E390E078 +:101ED00044C08091EA0182FF0EC08091EA0184FF34 +:101EE00003C080E090E039C083EE90E036C080917E +:101EF000EA0182FFF2CF82EE90E02FC08091EA01EA +:101F000083FF0BC08091EA0184FDEBCF87EE90E068 +:101F100024C08091EA0183FFF5CF86EE90E01DC0DA +:101F20008091EA0185FF07C089E290E016C08091A8 +:101F3000EA0185FFF9CF85E390E00FC08091EA01C7 +:101F400086FF07C08AE290E008C08091EA0186FF20 +:101F5000F9CF81E390E001C0C9010E94900D08957E +:101F6000089580916D0108959FB7F89410925C01D7 +:101F70009FBF9091F001943009F058C09091E90012 +:101F80009F702091EC0020FF02C020E801C020E0FB +:101F9000292B94E09093E9009091EB0090FF43C0CF +:101FA0009091EE0097FF3FC090915A01992321F044 +:101FB0009091E80095FF37C010925A0196E0309159 +:101FC000E80035FD15C03091F001343061F53091F5 +:101FD000EB0035FD28C0915021F481E080935A0137 +:101FE00022C0EFE9FFE03197F1F700C00000E7CF32 +:101FF0008093F1008091E80085FD0AC08091E8009F +:1020000080FFFCCF8091E8008E778093E80006C0C7 +:102010008FB7F89491E090935C018FBF2F7020935D +:10202000E90080E008952F702093E9008FEF089574 +:10203000CF93DF9300D01F92CDB7DEB72091F00190 +:10204000243019F523E029839B838A832093E900B8 +:102050008FEF9091E800815095FD06C095ED9A951F +:10206000F1F700008111F5CF8091E80085FF0DC0E8 +:1020700040E050E063E070E0CE0101960E94E7127C +:102080008091E8008E778093E8000F900F900F907A +:10209000DF91CF910895CF93DF9300D01F92CDB7FA +:1020A000DEB72091F001243021F522E029839B83C3 +:1020B0008A8383E08093E9008FEF9091E80081505C +:1020C00095FD06C095ED9A95F1F700008111F5CFC9 +:1020D0008091E80085FF0DC040E050E063E070E0D3 +:1020E000CE0101960E94E7128091E8008E778093DE +:1020F000E8000F900F900F90DF91CF9108952091FD +:10210000F0012430F1F422E02093E9002FEF309128 +:10211000E800215035FD06C035ED3A95F1F7000095 +:102120002111F5CF2091E80025FF0BC040E050E0E1 +:1021300065E070E00E94E7128091E8008E7780935E +:10214000E8000895CF93DF93EC018091F001843093 +:1021500009F047C080910C018823E1F080910D01C6 +:102160008823C1F085E08093E9008FEF9091E8002B +:10217000815095FD06C095E19A95F1F70000811117 +:10218000F5CF8091E80085FF2CC040E050E060E191 +:1021900070E017C081E08093E9008FEF9091E80034 +:1021A000815095FD06C095ED9A95F1F700008111DB +:1021B000F5CF8091E80085FF14C040E050E068E072 +:1021C00070E0CE010E94E7128091E8008E77809344 +:1021D000E80080E1FE01ADE5B1E001900D928A9545 +:1021E000E1F7DF91CF9108958DE498E00E94B40962 +:1021F0008091EF01811109C00E9479140E94D614C8 +:102200008091E20084608093E200089589E498E080 +:102210000E94B4091092EF01089585E498E00C94AF +:10222000B40981E498E00E94B4090C94342E8DE343 +:1022300098E00E94B4090E940E240E943A2E0E9447 +:1022400072170C94B00F80915B018F5F80935B01DC +:1022500062E30E94A82F911135C010925B0180911A +:102260005C01882379F18091F001843049F58091F7 +:10227000E9008F709091EC0090FF02C090E801C0DF +:1022800090E0982B84E08093E9008091EB0080FF40 +:1022900014C08091EE0087FF10C08091E80085FF98 +:1022A00003C01092F100F9CF8091E80080FF05C0D3 +:1022B0008091E8008E778093E8009F709093E9000A +:1022C00010925C01089542E061EC81E00E94F313FA +:1022D00042E061EC82E00E94F31342E061EC83E0B3 +:1022E0000E94F31342E261EC84E00E94F31342E1A6 +:1022F00061EC85E00C94F3138091F201833009F4D2 +:1023000055C030F4813071F0823009F48EC00895E8 +:102310008A3009F47AC08B3009F460C0893009F042 +:102320009CC020C08091F101813A09F096C0809153 +:10233000E800877F8093E8008091F5019091F60195 +:10234000892B21F060E080E090E003C060E18DE542 +:1023500091E070E00E9430138091E8008B778093C9 +:10236000E80008958091F101813209F076C08091F2 +:10237000F5019091F601009719F0049709F06DC0EE +:102380008091E800877F8093E8008091E80082FDDB +:1023900005C08091F0018111F8CF5FC08091F100FC +:1023A00080936D018091E8008B7753C08091F1019B +:1023B000813A09F052C08091F5019091F601892B84 +:1023C00009F04BC08091E800877F8093E8008091FE +:1023D000E80080FFFCCF80910C0136C08091F101B4 +:1023E0008132D9F58091F5019091F601892BA9F5FB +:1023F0008091E800877F8093E8000E9428148091F4 +:10240000F30180930C010C94351D8091F101813210 +:1024100021F58091E800877F8093E8000E942814CE +:102420008091F40180936E0108958091F101813AC9 +:10243000A1F48091E800877F8093E8008091E80014 +:1024400080FFFCCF80916E018093F1008091E800C5 +:102450008E778093E8000C942814089584B7877FC2 +:1024600084BF88E10FB6F8948093600010926000FA +:102470000FBE90E080E80FB6F894809361009093CF +:1024800061000FBE0E94FB170E9479140E94D614AF +:102490008091E20084608093E20084EB9FE00E94E0 +:1024A000A02378940E9450170E94FD1782E091E0CB +:1024B0000E946D170E94222E8CE298E00E94B409BF +:1024C0008091F001853089F488E298E00E94B40997 +:1024D0000E94D1238091EE01882391F30E94F92379 +:1024E000882371F30E94D112EBCF0E942B18E8CF02 +:1024F000292F332723303105A9F06CF42130310521 +:1025000009F442C02230310509F043C08DE890E063 +:1025100025E838E042C021323105C9F022323105C8 +:1025200019F137C099278130910541F0823091052A +:1025300041F0892B71F5E1E8F8E005C0E9E6F8E043 +:1025400002C0E1E5F8E0849190E09F0126C065308B +:1025500000F5E62FF0E0EE0FFF1FEB5DFE4F208150 +:10256000318189E090E019C0653098F4E62FF0E001 +:10257000DF01AA0FBB1FA55EBE4F2D913C91EA5E05 +:10258000FE4F808190E009C082E190E022E139E0D5 +:1025900004C080E090E020E030E0FA013183208345 +:1025A000089580E189BD82E189BD09B400FEFDCFB7 +:1025B0008091D8008F7D8093D8008091E000826068 +:1025C0008093E0008091E00081FDFCCF0895CF92E0 +:1025D000DF92EF92FF920F931F93CF93DF937C01D3 +:1025E0008B01EA010E944914811131C0209731F01A +:1025F00088819981081B190BE80EF91EC12CD12C7A +:102600000115110519F18091E80085FD14C0809134 +:10261000E8008E778093E800209741F088819981C7 +:102620008C0D9D1D9983888385E011C00E944914FB +:10263000882331F30CC0F70181917F018093F10071 +:1026400001501109FFEFCF1ADF0ADACF80E0DF91E6 +:10265000CF911F910F91FF90EF90DF90CF90089551 +:102660002091F7013091F8012617370748F06115DE +:10267000710539F42091E8002E772093E80001C01D +:10268000B901FC0120E061157105B9F18091F001FB +:10269000882309F440C0853009F43FC08091E800E8 +:1026A00083FD3DC08091E80082FF06C08091E80074 +:1026B00082FF26C080E008958091E80080FFE3CF8C +:1026C0002091F3008091F20090E0922B611571054A +:1026D00051F08830910538F421912093F100615038 +:1026E00071090196F3CF21E0089709F020E080916D +:1026F000E8008E778093E800C6CF2111C7CFD6CFF0 +:102700008091F001882339F0853039F08091E8001C +:1027100083FFCCCF04C082E0089583E0089581E078 +:1027200008952091F7013091F8012617370748F0F6 +:102730006115710539F42091E8002E772093E800A7 +:1027400001C0B901FC0120E061157105C1F1809162 +:10275000F001882309F441C0853009F440C080911C +:10276000E80083FD3EC08091E80082FF06C08091B2 +:10277000E80082FF27C080E008958091E80080FF94 +:10278000E3CF2091F3008091F20090E0922B61154D +:10279000710559F08830910540F424912093F1009F +:1027A0003196615071090196F2CF21E0089709F046 +:1027B00020E08091E8008E778093E800C5CF21115A +:1027C000C6CFD5CF8091F001882339F0853039F01C +:1027D0008091E80083FFCBCF04C082E0089583E0BE +:1027E000089581E00895982F973058F59093E90067 +:1027F000981739F07091EC002091ED005091F000A5 +:1028000003C0242F762F50E021FF19C03091EB0038 +:102810003E7F3093EB003091ED003D7F3093ED0033 +:102820003091EB0031603093EB007093EC0020931B +:10283000ED005093F0002091EE0027FF07C09F5F4E +:10284000D3CF8F708093E90081E0089580E00895F0 +:102850008091F10187FD05C08091E80080FF0EC0E6 +:1028600012C08091E80082FD05C08091F0018111C5 +:10287000F8CF08958091E8008B7708C08091F0012F +:102880008111EACF08958091E8008E778093E80067 +:1028900008958091E4009091E50045E62091EC00D8 +:1028A00020FF21C02091E80020FD21C02091F001EF +:1028B000222389F0253089F02091EB0025FD0FC0FF +:1028C0002091E4003091E5002817390739F3415091 +:1028D00041F0C901E3CF82E0089583E0089581E0EB +:1028E000089584E008952091E80022FFDFCF80E082 +:1028F00008950E94E7140E94EF14E0EEF0E080815A +:1029000081608083E8EDF0E080818F77808319BC5F +:10291000A7EDB0E08C918E7F8C9380818F7E808339 +:102920001092EF0108950F931F93CF93DF930E94AE +:10293000E7140E94EF14C8EDD0E088818F77888378 +:1029400088818068888388818F7D888319BC1092F4 +:10295000F0011092EC011092EE011092ED0100EEE8 +:1029600010E0F80180818B7F80838881816088837B +:1029700042E060E080E00E94F313E1EEF0E080814D +:102980008E7F8083E2EEF0E08081816080838081B1 +:1029900088608083F80180818E7F80838881806158 +:1029A0008883DF91CF911F910F910895E8EDF0E0BA +:1029B00080818F7E8083E7EDF0E08081816080837D +:1029C00084E082BF81E08093EF010C949314E8EDE2 +:1029D000F0E080818E7F80831092E2000895109253 +:1029E000DA001092E10008951F920F920FB60F9235 +:1029F00011242F933F934F935F936F937F938F9304 +:102A00009F93AF93BF93EF93FF938091E10082FF79 +:102A10000BC08091E20082FF07C08091E1008B7FB4 +:102A20008093E1000E9423118091DA0080FF1FC093 +:102A30008091D80080FF1BC08091DA008E7F809348 +:102A4000DA008091D90080FF0DC080E189BD82E16C +:102A500089BD09B400FEFDCF81E08093F0010E94A2 +:102A6000F41005C019BC1092F0010E94061180916B +:102A7000E10080FF19C08091E20080FF15C08091C5 +:102A8000E2008E7F8093E2008091E200806180937B +:102A9000E2008091D80080628093D80019BC85E064 +:102AA0008093F0010E9411118091E10084FF30C0F9 +:102AB0008091E20084FF2CC080E189BD82E189BD64 +:102AC00009B400FEFDCF8091D8008F7D8093D8009F +:102AD0008091E1008F7E8093E1008091E2008F7E03 +:102AE0008093E2008091E20081608093E200809117 +:102AF000EC01882311F084E007C08091E30087FF98 +:102B000002C083E001C081E08093F0010E941711B0 +:102B10008091E10083FF29C08091E20083FF25C0FE +:102B20008091E100877F8093E10082E08093F00153 +:102B30001092EC018091E1008E7F8093E100809102 +:102B4000E2008E7F8093E2008091E20080618093BA +:102B5000E20042E060E080E00E94F3138091F00028 +:102B600088608093F0000E940D11FF91EF91BF915A +:102B7000AF919F918F917F916F915F914F913F9115 +:102B80002F910F900FBE0F901F9018951F920F92CC +:102B90000FB60F9211242F933F934F935F936F9330 +:102BA0007F938F939F93AF93BF93CF93EF93FF93B5 +:102BB000C091E900CF708091EC001092E900809103 +:102BC000F000877F8093F00078940E9402161092A4 +:102BD000E9008091F00088608093F000C093E900E4 +:102BE000FF91EF91CF91BF91AF919F918F917F9185 +:102BF0006F915F914F913F912F910F900FBE0F906A +:102C00001F9018951F93CF93DF93CDB7DEB7AA9788 +:102C10000FB6F894DEBF0FBECDBFE1EFF1E08091BB +:102C2000F100819321E0E93FF207C9F70E947C118E +:102C30008091E80083FF1CC12091F1013091F201E5 +:102C4000832F90E08A30910508F012C1FC01EA5A06 +:102C5000FF4F0C94C82F203881F0223809F008C1AA +:102C60008091F5018F708093E9008091EB0085FBE6 +:102C7000882780F91092E90006C08091ED019091BB +:102C8000EE01911182609091E800977F9093E800A7 +:102C90008093F1001092F100C5C0822F8D7F09F062 +:102CA000E7C0222319F0223061F0E2C08091F301E5 +:102CB000813009F0DDC0333009F080E08093EE010F +:102CC00028C08091F301811124C02091F5012F705B +:102CD00009F4CEC02093E9008091EB0080FF19C079 +:102CE0008091EB00333011F4806211C080618093D9 +:102CF000EB0081E090E0022E01C0880F0A94EAF711 +:102D00008093EA001092EA008091EB008860809343 +:102D1000EB001092E9008091E800877F86C02111C6 +:102D2000A7C01091F3011F778091E3008078812B79 +:102D30008093E3008091E800877F8093E8000E9401 +:102D400028148091E80080FFFCCF8091E300806828 +:102D50008093E300112311F083E001C082E08093AF +:102D6000F00186C02058223008F082C08091F30123 +:102D70009091F4018C3D23E0920779F583E08A83FA +:102D80008AE289834FB7F894DE01139620E03EE093 +:102D900051E2E32FF0E050935700E49120FF03C08D +:102DA000E295EF703F5FEF708E2F90E0EA3010F009 +:102DB000C79601C0C0968D939D932F5F243149F72C +:102DC0004FBF8091E800877F8093E8006AE270E05F +:102DD000CE0101960E94301314C0AE014F5F5F4FC9 +:102DE0006091F5010E947812009709F441C020918A +:102DF000E800277F2093E800BC0189819A810E9426 +:102E000091138091E8008B778093E80031C02038DF +:102E100079F58091E800877F8093E8008091EC014C +:102E20008093F1008091E8008E778093E8000E9403 +:102E300028141EC021111CC09091F3019230C0F4DF +:102E40008091E800877F8093E8009093EC010E94D6 +:102E500028148091EC01811104C08091E30087FF68 +:102E600002C084E001C081E08093F0010E94631100 +:102E70008091E80083FF0AC08091E800877F8093FB +:102E8000E8008091EB0080628093EB00AA960FB679 +:102E9000F894DEBF0FBECDBFDF91CF911F91089593 +:102EA000CF938091F0018823B1F08091E9008F7079 +:102EB0009091EC0090FF02C090E801C090E0C92F13 +:102EC000C82B1092E9008091E80083FD0E94021651 +:102ED000CF70C093E900CF910895909374018093CF +:102EE00073010895E0917301F0917401309721F01E +:102EF0000190F081E02D099480E00895FF920F93F6 +:102F00001F93CF93DF938C01E0917301F0917401D3 +:102F1000309799F10280F381E02D09958091D701D6 +:102F200082FF2BC080FF04C087E49AE00E94B409AE +:102F3000E80180E1F82E01E41AE08091D70180FFDA +:102F40000BC088811F928F931F930F930E944D0A8D +:102F50000F900F900F900F90FA942196F110EDCFF3 +:102F60008091D70180FF09C08FE39AE0DF91CF9174 +:102F70001F910F91FF900C94B409DF91CF911F9195 +:102F80000F91FF900895E0917301F09174013097D3 +:102F900021F00480F581E02D0994089520917101BC +:102FA000309172018217930771F0909372018093B0 +:102FB0007101E0917301F0917401309721F0068066 +:102FC000F781E02D0994089520916F0130917001EF +:102FD0008217930771F09093700180936F01E091D5 +:102FE0007301F0917401309721F00084F185E02D98 +:102FF0000994089508950C94FA170E9410240E94D1 +:10300000FB0B0C94D624CF93C82F8091D70182FF5D +:103010001EC080FF04C080E69AE00E94B40980913F +:10302000D70180FF0CC01F92CF932BE53AE03F936E +:103030002F930E944D0A0F900F900F900F90809148 +:10304000D70180FF04C089E59AE00E94B4098C2F63 +:10305000CF910C94B00FCF92DF92EF92FF920F932B +:103060001F93CF93DF93CDB7DEB72B970FB6F894AE +:10307000DEBF0FBECDBF0E94180C36E7E32E31E055 +:10308000F32E00E010E0C02E802F0E94430DF701C8 +:10309000D1907F01D826B1F40F5F1F4F0E3011057C +:1030A00091F78FEF89838A831B820E9419248160A4 +:1030B000782F9D838C8349815A816B818D810E94F9 +:1030C000CE1841C09091D70191FF04C08B870E9418 +:1030D000490D8B8520E030E04D2D50E0922FBA0154 +:1030E000022E02C0759567950A94E2F760FF25C02D +:1030F0002E83CF82EE24E394F12C02C0EE0CFF1C51 +:103100009A95E2F790E08E219F2121E0892B09F426 +:1031100020E028870E9419248160782F9A87898768 +:103120004E815F8168858A850E94CE18F801EA5831 +:10313000FE4F80818E25808306C02F5F3F4F263053 +:10314000310561F6A9CF0E944428109175010E94B3 +:1031500072171817A1F00E947217809375012B96B1 +:103160000FB6F894DEBF0FBECDBFDF91CF911F9198 +:103170000F91FF90EF90DF90CF900C9403182B9657 +:103180000FB6F894DEBF0FBECDBFDF91CF911F9178 +:103190000F91FF90EF90DF90CF900895CF93DF9342 +:1031A000CDB7DEB72B970FB6F894DEBF0FBECDBFFD +:1031B0004F83588769877A878B87DE01119686E06F +:1031C000FD0111928A95E9F785E0FE01379601909D +:1031D0000D928A95E1F749815A816B817C818D81BD +:1031E0009E810E9401202B960FB6F894DEBF0FBE81 +:1031F000CDBFDF91CF910895CF93C82F882309F4D5 +:10320000C1C0823859F40E94721781FDBBC089E3A6 +:103210000E949E220E947A2389E30CC0833879F4AD +:103220000E94721780FDAEC083E50E949E220E941C +:103230007A2383E50E94EF22CF910C947A2384387D +:1032400059F40E94721782FD9DC087E40E949E225D +:103250000E947A2387E4EECF8CEF8C0F813A48F4FA +:103260008C2F0E94CD2C81118DC08C2F0E949E220C +:10327000E3CF80E28C0F883048F4C77081E001C052 +:10328000880FCA95EAF70E944123D6CF8BE58C0FB1 +:10329000833078F4C53A29F0C63A31F482E890E0F8 +:1032A00005C081E890E002C083E890E0CF910C94E3 +:1032B000CE1788E58C0F833108F064C0C83A39F125 +:1032C000C93A41F1CA3A49F1CB3A51F1CC3A59F1F4 +:1032D000CD3A61F1C03B69F1CE3A71F1CF3A79F163 +:1032E000C13B81F1C23B89F1C33B91F1C43B99F1F0 +:1032F000C53BA1F1C63BA9F1C73BB1F1C83BB9F150 +:10330000C93BC1F1CA3BC9F58AE292E038C082EEFE +:1033100090E035C089EE90E032C08AEE90E02FC098 +:1033200085EB90E02CC086EB90E029C087EB90E025 +:1033300026C08CEC90E023C08DEC90E020C083E8A8 +:1033400091E01DC08AE891E01AC082E991E017C0BF +:1033500084E991E014C081E292E011C083E292E03E +:103360000EC084E292E00BC085E292E008C086E2E3 +:1033700092E005C087E292E002C080E090E0CF9149 +:103380000C94E417CF910895882309F44BC0823838 +:1033900059F40E94721781FF45C089E30E949E2262 +:1033A0000E947A2389E30CC0833871F40E9472175B +:1033B00080FF38C083E50E949E220E947A2383E525 +:1033C0000E94EF220C947A23843859F40E947217D9 +:1033D00082FF28C087E40E949E220E947A2387E40D +:1033E000EFCF9CEF980F913A58F390E2980F9830F6 +:1033F00050F4877091E001C0990F8A95EAF7892F00 +:103400000E944723DFCF9BE5980F933020F480E0A4 +:1034100090E00C94CE17885A833120F480E090E03D +:103420000C94E4170895882321F00E9441230C9402 +:103430007A230895882321F00E9447230C947A234D +:103440000895CF92DF92EF92FF920F931F93CF9345 +:10345000DF93CDB7DEB728970FB6F894DEBF0FBE67 +:10346000CDBF8C0185E0F801DE01119601900D922F +:103470008A95E1F7F80140813181F280258122951A +:103480002F7083819481892B31F03F3F31F481E0AB +:103490004F3F19F403C081E001C080E080FDC4C249 +:1034A00049833A8389819A812F830E945C229E837B +:1034B00088870E945B220E942E214E81E42FE29594 +:1034C000EF70F0E0E05AFF4F2F8168850C94C82F11 +:1034D000842F807F142F1F70882311F01295107F86 +:1034E000FF2059F0112309F454C2812F68870E94EC +:1034F00051230E947A2368854CC2862F0E94C419EA +:10350000112309F491C2812F0E94572328960FB6E8 +:10351000F894DEBF0FBECDBFDF91CF911F910F9109 +:10352000FF90EF90DF90CF900C947A23342F307F70 +:10353000842F8F70303211F08295807F662319F0CE +:10354000613019F12BC0FF20B1F0222309F493C19F +:10355000213009F090C128960FB6F894DEBF0FBE57 +:10356000CDBFDF91CF911F910F91FF90EF90DF9032 +:10357000CF900C946123222319F0213009F454C216 +:103580008E830E9464238E8189C1FF2021F0223026 +:1035900008F04AC270C1211147C280C1FF2021F04A +:1035A000222309F468C1F5C1222309F477C105C2B9 +:1035B000242F26952695237030E02115310521F022 +:1035C00021303105C9F030C2FF2021F0862F942F21 +:1035D000937002C080E090E028960FB6F894DEBFAA +:1035E0000FBECDBFDF91CF911F910F91FF90EF9054 +:1035F000DF90CF900C94CE17FF2021F0862F942FD0 +:10360000937002C080E090E028960FB6F894DEBF79 +:103610000FBECDBFDF91CF911F910F91FF90EF9023 +:10362000DF90CF900C94E417862FFF2019F00E94B2 +:10363000CA2602C00E94322728960FB6F894DEBF31 +:103640000FBECDBFDF91CF911F910F91FF90EF90F3 +:10365000DF90CF900C94B727842F837009F076C049 +:10366000F110E2C1262F229526952770220F220FF6 +:10367000862F8F70C82ED12CE12CF12C022E04C085 +:10368000CC0CDD1CEE1CFF1C0A94D2F764FF10C0AA +:103690006FE070E080E090E004C0660F771F881F45 +:1036A000991F2A95D2F7609570958095909503C0E3 +:1036B00060E070E0CB01242F269526952370422FE1 +:1036C00050E042305105D1F04330510559F16C2999 +:1036D0007D298E299F294130510541F128960FB649 +:1036E000F894DEBF0FBECDBFDF91CF911F910F9138 +:1036F000FF90EF90DF90CF900C9453216C297D299F +:103700008E299F2928960FB6F894DEBF0FBECDBF35 +:10371000DF91CF911F910F91FF90EF90DF90CF90AD +:103720000C946D210E945321C701B60128960FB653 +:10373000F894DEBF0FBECDBFDF91CF911F910F91E7 +:10374000FF90EF90DF90CF900C943921FF2019F07B +:10375000842F817001C08695882309F465C1262FC6 +:10376000229526952770220F220F862F8F70C82E44 +:10377000D12CE12CF12C022E04C0CC0CDD1CEE1C53 +:10378000FF1C0A94D2F764FF10C06FE070E080E085 +:1037900090E004C0660F771F881F991F2A95D2F703 +:1037A000609570958095909503C060E070E0CB01C6 +:1037B000242F269526952370422F50E04230510544 +:1037C000D1F04330510559F16C297D298E299F296B +:1037D0004130510541F128960FB6F894DEBF0FBE77 +:1037E000CDBFDF91CF911F910F91FF90EF90DF90B0 +:1037F000CF900C9427226C297D298E299F29289609 +:103800000FB6F894DEBF0FBECDBFDF91CF911F91F1 +:103810000F91FF90EF90DF90CF900C9441220E9487 +:103820002722C701B60128960FB6F894DEBF0FBE57 +:10383000CDBFDF91CF911F910F91FF90EF90DF905F +:10384000CF900C940D22603FC9F118F4603E50F403 +:103850009BC0623F09F460C008F44AC0633F09F4AA +:103860006FC092C0162F1F70842F8F71FF2099F0A8 +:103870000E94A621812F28960FB6F894DEBF0FBEB6 +:10388000CDBFDF91CF911F910F91FF90EF90DF900F +:10389000CF900C94131A0E94C721812F28960FB63F +:1038A000F894DEBF0FBECDBFDF91CF911F910F9176 +:1038B000FF90EF90DF90CF900C941A1AFF20A1F0A8 +:1038C0002111B2C0842F8F7128960FB6F894DEBFF5 +:1038D0000FBECDBFDF91CF911F910F91FF90EF9061 +:1038E000DF90CF900C94EC21223008F09DC0EACFFD +:1038F000FF20A1F0842F8F7128960FB6F894DEBFB9 +:103900000FBECDBFDF91CF911F910F91FF90EF9030 +:10391000DF90CF900C94A621FF2061F3842F8F714C +:1039200028960FB6F894DEBF0FBECDBFDF91CF91C2 +:103930001F910F91FF90EF90DF90CF900C94C721D3 +:10394000FF2091F0842F8F7128960FB6F894DEBF78 +:103950000FBECDBFDF91CF911F910F91FF90EF90E0 +:10396000DF90CF900C94912128960FB6F894DEBF8B +:103970000FBECDBFDF91CF911F910F91FF90EF90C0 +:10398000DF90CF900C948721FF20A1F0222309F42F +:10399000B1CF862F28960FB6F894DEBF0FBECDBFED +:1039A000DF91CF911F910F91FF90EF90DF90CF901B +:1039B0000C94FC18222309F4B1CF862F28960FB659 +:1039C000F894DEBF0FBECDBFDF91CF911F910F9155 +:1039D000FF90EF90DF90CF900C94C4194F70C80106 +:1039E0000E94560A28960FB6F894DEBF0FBECDBFD0 +:1039F000DF91CF911F910F91FF90EF90DF90CF90CB +:103A00000C94AE204F70C80128960FB6F894DEBF14 +:103A10000FBECDBFDF91CF911F910F91FF90EF901F +:103A2000DF90CF900C944F0E28960FB6F894DEBF1F +:103A30000FBECDBFDF91CF911F910F91FF90EF90FF +:103A4000DF90CF9008950E945E230E9433230E944E +:103A50007A230E94E5280E94B72780E090E00E9428 +:103A6000CE1780E090E00C94E4170E944E230C9453 +:103A7000231D0E945C22292F22952F7030E02C30CC +:103A800031054CF42A3031056CF4225031092230D2 +:103A9000310590F407C02C30310551F02F3031053D +:103AA00039F00AC0803E10F0803F31F481E0089583 +:103AB00093FB882780F9089580E00895CF93DF93E2 +:103AC00000D000D01F92CDB7DEB70F900F900F90AF +:103AD0000F900F90DF91CF910895CF93DF9300D097 +:103AE00000D000D0CDB7DEB726960FB6F894DEBF73 +:103AF0000FBECDBFDF91CF9108951F93CF93DF937A +:103B0000C091840116E080918501C81799F0D0E03A +:103B10001C9FF0011D9FF00D1124EA57FE4F4081BC +:103B2000518162817381848195810E946D1D2196EE +:103B3000C770E9CFDF91CF911F9108954091B601F1 +:103B40005091B7016091B8017091B9018091BA01AB +:103B50009091BB010C946D1DCF938091BB01829518 +:103B60008F7009F05FC08091B801882309F45AC0B2 +:103B700020918401A09185016091B6017091B701F7 +:103B80008091B9019091BA0131E06F3F09F030E0C6 +:103B9000B32FC6E02A1709F445C0009721F07F3FF4 +:103BA00021F44B2F03C041E001C040E030E040FD74 +:103BB00035C0C29FF001C39FF00D1124EA57FE4F9C +:103BC000418174132BC04081641328C0428141118C +:103BD00025C0438154814817590710F441505109B9 +:103BE000481B590B483C5105C8F48091BB018F70AC +:103BF00080618093BB0186E0829FF001839FF00D7E +:103C00001124E557FE4F80818F708061808386EBA1 +:103C100091E00E94211ACF910C947D1D2F5F3F4FA0 +:103C20002770B8CFCF910895CF92DF92EF92FF9295 +:103C30000F931F93CF93DF93CDB7DEB762970FB685 +:103C4000F894DEBF0FBECDBF8C0185E0F801DE0128 +:103C50001D9601900D928A95E1F7D8014C9111962D +:103C60005C91119712966C9112971396ED90FC90BF +:103C700014977091B601E091B7012091B90130918C +:103C8000BA012115310531F0EF3F31F481E07F3F7A +:103C900019F403C081E001C080E0B82FB170CB2ED1 +:103CA00080FD6CC1D090B801DD2009F4F5C0F09121 +:103CB000BB01E216F30638F0C701821B930B883C68 +:103CC000910548F09BC0209530952E0D3F1D283C56 +:103CD000310508F093C08F2F807F09F052C0E513A3 +:103CE00014C0741312C0D62E61110FC0FF70F061A2 +:103CF000F093BB010E949E1D86EB91E00E94211A69 +:103D00008091BB01F80185836CC1EF2831F05F3FE2 +:103D100031F481E04F3F19F403C081E001C080E03D +:103D200080FD03C081E0862701C080E0F82FF1709C +:103D3000FF2E80FF1CC0809184012091850136E018 +:103D4000821709F428C190E0389FF001399FF00DE7 +:103D50001124EA57FE4F7181571306C07081471333 +:103D600003C07281671303C001968770E9CFD62E16 +:103D7000662309F436C18091BB0181608093BB0149 +:103D800053C0E51308C0741306C0611104C0D80104 +:103D90001596FC93AEC04D875E878D859E856A8B98 +:103DA0000E94391D6A89882329F1D62E662311F1D4 +:103DB0002091BB01822F82958F7090E002970CF4C6 +:103DC00060C08091B6019091B70198878F83198662 +:103DD000FB86EA862C87CE01079651C0E51731F1A4 +:103DE0004D875E878D859E856A8B0E94391D6A8905 +:103DF00081112EC0C8010E94211AA4C08F2F807F7C +:103E000069F77E2DF98AE88A89890E945E1D86EB12 +:103E100091E00E94211AE6EBF1E086E0DF011D92BD +:103E20008A95E9F70E949E1DD12CDBC07413D8CF70 +:103E30006111D6CFD8011596FC93C8010E94211AB2 +:103E4000E6EBF1E086E0DF011D928A95E9F7C9C053 +:103E5000D62E662379F22091BB01822F82958F7036 +:103E600090E0029774F08091B6019091B7019A8327 +:103E700089831B82FD82EC822E83CE0101960E94F3 +:103E8000211A86E0F801A6EBB1E001900D928A9527 +:103E9000E1F70E94AC1D6FC0E216F30628F0C701DF +:103EA000821B930B9C0104C0209530952E0D3F1D65 +:103EB000283C310508F052C0D62E662309F49ACF6B +:103EC000E5132CC074132AC08091BB0180FD1DC076 +:103ED000982F92959F70C9F0D80115968C931597DD +:103EE0009F3039F09F5F9295907F8F70892B159648 +:103EF0008C93C8010E94211A86E0F801A6EBB1E07C +:103F000001900D928A95E1F736C086E0F801A6EBA4 +:103F1000B1E001900D928A95E1F763C04D875E870D +:103F20008D859E850E94391D882379F086E0F801F1 +:103F3000A6EBB1E001900D928A95E1F70E94AC1DCD +:103F40000E949E1DDD24D3944CC08091BB018160F2 +:103F50008093BB01C8010E94211A43C07E2DF98ABB +:103F6000E88A89890E945E1DE6EBF1E086E0DF01C8 +:103F70001D928A95E9F70E949E1D33C0662309F4BD +:103F800039CF4D875E878D859E850E94391D882398 +:103F900009F430CFCBCF4D875E878D859E850E94FB +:103FA0005C22292F22952F7030E0223031052CF42D +:103FB0009F7041F0811106C00CC0243031052CF4F3 +:103FC0009F7049F4805E883020F0C8010E94211A59 +:103FD000CF2CDC2C06C0D80115969C91907F91F7D0 +:103FE000F8CF8D2D62960FB6F894DEBF0FBECDBF11 +:103FF000DF91CF911F910F91FF90EF90DF90CF90C5 +:1040000008951F93CF93DF93CDB7DEB72C970FB6EC +:10401000F894DEBF0FBECDBF4F83588769877A877C +:104020008B879C87CE0107960E94141E8823C1F0BF +:104030002F8138858A859B85892B31F03F3F11F090 +:1040400080E003C02F3FE1F781E0811147C04F813D +:10405000588569857A858B859C850E946D1D3EC03B +:1040600086E0FE013796DE01119601900D928A9549 +:10407000E1F7FF81E8854A855B854115510531F0FF +:10408000EF3F31F481E0FF3F19F403C081E001C04C +:1040900080E080FD23C02091850130E0C9010196B8 +:1040A000877099276091840170E086179707F1F176 +:1040B000F983EA835D834C8396E0929FD001939FBE +:1040C000B00D1124AA57BE4FFE01319601900D92FA +:1040D0009A95E1F7809385010E947D1D16E08091FD +:1040E000840190918501891779F1189FC0011124ED +:1040F0008A579E4F0E94141E882331F1E09184015B +:104100001E9FF0011124EA57FE4F408151816281C8 +:104110007381848195810E946D1D8091840190E05E +:1041200001968770992780938401D9CF0E94351D0D +:104130001092850110928401E6EBF1E086E0DF0148 +:104140001D928A95E9F7CACF2C960FB6F894DEBF78 +:104150000FBECDBFDF91CF911F910895EF92FF92D7 +:104160000F931F93CF93DF93FC01009709F46FC067 +:10417000F12CEE24E394EF0121968491843740F4EE +:10418000843008F055C0813081F0823021F15FC069 +:10419000853709F447C0C0F19CE7980F903708F0C5 +:1041A00056C08F770E94C41945C08F010E5F1F4F04 +:1041B000FE01849190E2980F983050F48770FE2DA4 +:1041C00001C0FF0F8A95EAF78F2F0E94512315C077 +:1041D0000E94FC1814C08F010E5F1F4FFE018491D6 +:1041E00090E2980F983068F48770FE2D01C0FF0FA1 +:1041F0008A95EAF78F2F0E9457230E947A23E801BD +:1042000019C00E94C419FBCFCF010296FE01C491D0 +:10421000CC2361F0EFE9FFE03197F1F700C0000037 +:10422000C150F6CFCF010296FE01F490EC0102C01E +:104230000E94FC188F2D882341F0EFE9FFE03197B1 +:10424000F1F700C000008150F6CFFE0194CFDF915E +:10425000CF911F910F91FF90EF9008950895609373 +:10426000C0017093C1018093C2019093C3010C946B +:10427000231D0F931F930091C0011091C101209144 +:10428000C2013091C301062B172B282B392B009329 +:10429000C0011093C1012093C2013093C3011F914B +:1042A0000F910C94231D0F931F930091C001109147 +:1042B000C1012091C2013091C30106231723282395 +:1042C00039230093C0011093C1012093C2013093A0 +:1042D000C3011F910F910C94231D0F931F93009105 +:1042E000C0011091C1012091C2013091C301062784 +:1042F0001727282739270093C0011093C101209365 +:10430000C2013093C3011F910F910C94231D109291 +:10431000BC011092BD011092BE011092BF010C941D +:10432000231D41E050E060E070E004C0440F551FE1 +:10433000661F771F8A95D2F74093BC015093BD0149 +:104340006093BE017093BF010C94231D41E050E0C7 +:1043500060E070E004C0440F551F661F771F8A9508 +:10436000D2F78091BC019091BD01A091BE01B091A6 +:10437000BF01842B952BA62BB72B8093BC01909368 +:10438000BD01A093BE01B093BF010C94231D41E079 +:1043900050E060E070E004C0440F551F661F771FB7 +:1043A0008A95D2F740955095609570958091BC01A3 +:1043B0009091BD01A091BE01B091BF0184239523CE +:1043C000A623B7238093BC019093BD01A093BE01A7 +:1043D000B093BF010C94231D41E050E060E070E019 +:1043E00004C0440F551F661F771F8A95D2F780912E +:1043F000BC019091BD01A091BE01B091BF01842785 +:104400009527A627B7278093BC019093BD01A09361 +:10441000BE01B093BF010C94231D0F931F93009115 +:10442000BC011091BD012091BE013091BF01062B4E +:10443000172B282B392B0093BC011093BD0120931F +:10444000BE013093BF011F910F910C94231D0F9358 +:104450001F930091BC011091BD012091BE013091CC +:10446000BF0106231723282339230093BC0110938F +:10447000BD012093BE013093BF011F910F910C9499 +:10448000231D0F931F930091BC011091BD0120913A +:10449000BE013091BF01062717272827392700932F +:1044A000BC011093BD012093BE013093BF011F9149 +:1044B0000F910C94231D0895CF92DF92EF92FF92FB +:1044C0000F931F93CF93DF93EC01C090C001D09066 +:1044D000C101E090C201F090C3018091BC019091B4 +:1044E000BD01A091BE01B091BF01C82AD92AEA2A14 +:1044F000FB2A0FE110E0B701A601002E04C076955B +:104500006795579547950A94D2F740FF07C0BE01BB +:10451000802F0E94720E8130910539F401501109EB +:1045200050F7BE0180E00E94720EDF91CF911F9183 +:104530000F91FF90EF90DF90CF90089590910C0134 +:10454000992361F190910D01992341F1982F96954E +:10455000969596959F3088F4E0910E01F0910F01A9 +:10456000E90FF11D877021E030E001C0220F8A952C +:10457000EAF78181822B818308959091D70190FF82 +:104580002DC01F928F9381E99AE09F938F930E9491 +:104590004D0A0F900F900F900F90089540910E01CB +:1045A00050910F0120E030E09FEFFA01E20FF31F7E +:1045B0006281681799F09F3F19F4611101C0922F31 +:1045C0002F5F3F4F2E30310581F79F3F39F0FA01C1 +:1045D000E90FF11D97FDFA95828308950895909152 +:1045E0000C01992369F190910D01992349F1982FBC +:1045F0009695969596959F3090F4E0910E01F091E6 +:104600000F01E90FF11D877021E030E001C0220F9A +:104610008A95EAF720958181282321830895909136 +:10462000D70190FF1FC01F928F9383E79AE09F935B +:104630008F930E944D0A0F900F900F900F90089546 +:1046400040910E0150910F0120E030E0FA01E20F9D +:10465000F31F9281981301C012822F5F3F4F2E30BB +:104660003105A1F7089581E090E0E0910E01F0910D +:104670000F01E80FF91F1082019680319105A9F70B +:1046800008959091D601982B9093D6010895809526 +:104690009091D60198239093D60108951092D60157 +:1046A00008959091D501982B9093D5010895809508 +:1046B0009091D50198239093D50108951092D5013A +:1046C00008958093C40108951092C4010895409103 +:1046D0000E0150910F0120E030E080E0FA01E20F7E +:1046E000F31F918191118F5F2F5F3F4F2F30310565 +:1046F000A9F70895E0910E01F0910F018091D60184 +:104700008083E0910E01F0910F0180819091D5019D +:10471000892B80839091C401992361F0E0910E016F +:10472000F0910F018081892B80830E946723811182 +:104730001092C40180910E0190910F010C947E178C +:1047400090933B0180933A0108958295982F9C7C29 +:1047500096959695837344E0849F90011124922B43 +:10476000892F8A7A86959575990F892B08951F93BD +:10477000CF93DF931F92CDB7DEB799830E94A52315 +:10478000182F9981892F0E94A523212F30E0322FE5 +:104790002227A901482BCA010F90DF91CF911F91C9 +:1047A00008958091F001843009F11092D80120E43D +:1047B00088E190E00FB6F894A895809360000FBE52 +:1047C0002093600083B7817F846083BF83B781605B +:1047D00083BF7894889583B78E7F83BF88E10FB6B7 +:1047E000F89480936000109260000FBE08950895C1 +:1047F0000895CF930E94F7230E94180C0E94F8237B +:10480000C0E08C2F0E94430D811105C0CF5FCE30D8 +:10481000C1F780E001C081E0CF9108950C94351D6F +:1048200082E084BD93E095BD9AEF97BD80936E00C2 +:1048300008952FB7F8948091D9019091DA01A09151 +:10484000DB01B091DC012FBF0895CF92DF92EF9290 +:10485000FF920F931F932FB7F8944091D901509175 +:10486000DA016091DB017091DC012FBF6A017B01ED +:10487000EE24FF248C0120E030E0C016D106E206D1 +:10488000F30610F441505109481B590BCA011F91FE +:104890000F91FF90EF90DF90CF9008951F920F92AD +:1048A0000FB60F9211248F939F93AF93BF93809174 +:1048B000D9019091DA01A091DB01B091DC01019660 +:1048C000A11DB11D8093D9019093DA01A093DB0162 +:1048D000B093DC01BF91AF919F918F910F900FBE6C +:1048E0000F901F9018950E947914F8942FEF87EA83 +:1048F00091E6215080409040E1F700C0000087E041 +:1049000090EBDC018093F9019093FA01A093FB01F5 +:10491000B093FC012CE088E190E00FB6F894A895E4 +:10492000809360000FBE20936000FFCFEF92FF9254 +:104930000F931F93CF93DF93E82EF12C8F2D0E94BE +:10494000430DC0E0D0E0082F10E098010C2E02C00B +:10495000359527950A94E2F720FD05C02196C630CB +:10496000D10599F709C06C2F7F2D80E00E94500E71 +:10497000E812F4CF81E005C0F3948EE0F812DECFA8 +:1049800080E0DF91CF911F910F91FF90EF900895FC +:10499000CF93C82F8CE20E949624882321F08C2F7D +:1049A000CF910C94962480E0CF910895CF930E94EC +:1049B0002326811102C00E94092686EB9AE00E94FC +:1049C000B409C5E6C15049F00E94180C8FE39CE978 +:1049D0000197F1F700C00000F5CF8FEA9AE00E943E +:1049E000B40989E20E94C824811111C18AE20E949F +:1049F000C82481110E94092685E00E94C8248111E3 +:104A00000E9473240E942E268093D70187E00E9483 +:104A1000C824882399F18BE10E94C824882351F08F +:104A20009091D70191FB882780F921E0822780FBB4 +:104A300091F922C08EE00E94C824882351F0909101 +:104A4000D70192FB882780F921E0822780FB92F929 +:104A500013C080E10E94C8249091D701882341F0BF +:104A600093FB882780F921E0822780FB93F904C01B +:104A7000892F809580FB90F99093D7018091D70181 +:104A80000E9432260E9440268093EA0180EE0E9416 +:104A9000C824882341F08091EA01982F909590FBDB +:104AA00080F98093EA0189E30E94C824882359F0A1 +:104AB0009091EA0191FB882780F921E0822780FB11 +:104AC00091F99093EA0182EE0E94C824882359F05C +:104AD0009091EA0192FB882780F921E0822780FBF0 +:104AE00092F99093EA0186EE0E94C824882359F037 +:104AF0009091EA0193FB882780F921E0822780FBCF +:104B000093F99093EA0183EE0E94C824882359F018 +:104B10009091EA0194FB882780F921E0822780FBAD +:104B200094F99093EA0185E30E94C824882359F000 +:104B30009091EA0195FB882780F921E0822780FB8C +:104B400095F99093EA0181E30E94C824882359F0E3 +:104B50009091EA0196FB882780F921E0822780FB6B +:104B600096F99093EA0181E10E94C824882359F0C4 +:104B70009091EA0197FB882780F921E0822780FB4A +:104B800097F99093EA018091EA010E94442680916E +:104B9000EA0187FB882780F980930D0187E20E9454 +:104BA000C824C82F8EE10E94C8248111C2608FE101 +:104BB0000E94C8248111C46080E20E94C82481112F +:104BC000C86081E20E94C8248111C06182E20E9413 +:104BD000C8248111C06283E20E94C8248111C0648C +:104BE00084E20E94C824882311F0C06802C0CC234C +:104BF00029F08C2F0E943B266C2F03C00E94372681 +:104C0000682F70E080E090E0CF910C942F21CF913D +:104C100008956DEE7EEF80E090E00E94FE2F60E050 +:104C200082E090E00E94F02F60E083E090E00E943C +:104C3000F02F60E084E090E00E94F02F60E085E0DB +:104C400090E00C94F02F80E090E00E94EA2F21E0A9 +:104C50008D3E9E4F09F020E0822F089582E090E083 +:104C60000C94E22F682F82E090E00C94F02F83E008 +:104C700090E00C94E22F682F83E090E00C94F02FEA +:104C800084E090E00C94E22F682F84E090E00C9494 +:104C9000F02F8091DF0180FF0BC06091130185E050 +:104CA000689FB001112475956795759567952AC021 +:104CB00081FF09C06091130185E0689FB001112454 +:104CC000759567951FC082FF07C06091130185E04D +:104CD000689FB001112416C04091E0014423C9F03F +:104CE00060911201461788F72091130185E0289FF3 +:104CF00090011124429FC001439F900D112470E048 +:104D00000E94B42F6038710540F46115710539F0C7 +:104D100002C065E070E0862F08958FE7089581E076 +:104D200008958091DF0180FF08C06091110170E05B +:104D3000759567957595679521C081FF06C060914F +:104D4000110170E07595679519C082FF04C06091EC +:104D5000110170E010C08091E0018823C1F06091E2 +:104D600010018617A0F790911101989FC00111249E +:104D700070E00E94B42F6038710528F46115710548 +:104D800021F0862F08958FE7089581E0089561E06E +:104D900070E0F4CF803F21F40E944926819504C041 +:104DA000813F29F40E9449268093E3010895823FC0 +:104DB00021F40E944926819504C0833F29F40E9472 +:104DC00049268093E2010895893F19F40E949126B3 +:104DD00005C08A3F31F40E94912681958093E401B9 +:104DE00008958B3F21F40E949126819504C08C3F49 +:104DF00029F40E9491268093E5010895843F21F4CF +:104E00008091E101816017C0853F21F48091E1012B +:104E1000826011C0863F21F48091E10184600BC063 +:104E2000873F21F48091E101886005C0883F31F41B +:104E30008091E10180618093E10108958D3F21F42B +:104E40008091DF0181600BC08E3F21F48091DF01F2 +:104E5000826005C08F3F29F48091DF0184608093D8 +:104E6000DF010895803F39F48091E30187FF6CC032 +:104E70001092E30169C0813F29F48091E301181683 +:104E8000BCF362C09091E201823F29F497FF5CC0BD +:104E90001092E20159C0833F19F41916CCF354C0A3 +:104EA000893F41F48091E40118160CF04DC0109236 +:104EB000E4014AC08A3F29F48091E40187FF44C09D +:104EC000F6CF8B3F39F48091E50187FF3DC010920A +:104ED000E5013AC08C3F29F48091E5011816BCF336 +:104EE00033C0843F21F48091E1018E7F17C0853F5C +:104EF00021F48091E1018D7F11C0863F21F48091E2 +:104F0000E1018B7F0BC0873F21F48091E101877F16 +:104F100005C0883F31F48091E1018F7E8093E101EB +:104F200013C08D3F21F48091DF018E7F0BC08E3F37 +:104F300021F48091DF018D7F05C08F3F29F480919E +:104F4000DF018B7F8093DF018091E20181110EC030 +:104F50008091E30181110AC08091E401811106C0B2 +:104F60008091E501811102C01092E00108958091C5 +:104F7000D70183FF7EC082EF9AE00E94B40980913E +:104F8000E1011F928F938DEE9AE09F938F930E9481 +:104F90004D0A8BEE9AE00E94B4092091E201822F23 +:104FA000992787FD90959F932F9388EE9AE09F9382 +:104FB0008F930E944D0A86EE9AE00E94B4092091D8 +:104FC000E301822F992787FD90959F932F9383EE7E +:104FD0009AE09F938F930E944D0A81EE9AE00E947F +:104FE000B4092091E401822F992787FD90959F9322 +:104FF0002F938EED9AE09F938F930E944D0A8CED34 +:105000009AE00E94B4092091E501822F992787FD3B +:1050100090959F932F9389ED9AE09F938F930E9491 +:105020004D0A86ED9AE00E94B4098091E0011F923A +:105030008F9383ED9AE09F938F930E944D0A81EDA9 +:105040009AE00E94B4098091DF011F928F938EEC49 +:105050009AE09F938F930E944D0A8BEC9AE00E94F6 +:10506000B4098DB79EB74C960FB6F8949EBF0FBE8D +:105070008DBF81EE91E00E94C3170E941924909386 +:10508000DE018093DD0108951F93CF93DF9380911C +:10509000DD019091DE010E9425244091E00144232E +:1050A00021F02091140130E006C0209115015AE052 +:1050B000259F900111248217930708F482C08091E4 +:1050C000E2011091E301D091E401C091E501811169 +:1050D00007C0111105C0D11103C0CC2309F471C060 +:1050E0004F3F19F04F5F4093E001181624F40E94DF +:1050F00049268093E2018091E20187FF05C00E946A +:10510000492681958093E201111624F40E944926D4 +:105110008093E3018091E30187FF05C00E94492647 +:1051200081958093E3016091E201662339F110914A +:10513000E301112319F1772767FD7095872F972FCA +:105140000E94B92E23E333E343E35FE30E941D2F64 +:105150000E94862E6093E201612F772767FD70958C +:10516000872F972F0E94B92E23E333E343E35FE3B6 +:105170000E941D2F0E94862E6093E3011D1624F4C9 +:105180000E9491268093E4018091E40187FF05C08D +:105190000E94912681958093E4011C1624F40E94BC +:1051A00091268093E5018091E50187FF05C00E946B +:1051B000912681958093E501DF91CF911F910C9409 +:1051C000B727DF91CF911F910895E1EEF1E085E0DF +:1051D000DF011D928A95E9F71092E0011092DF013C +:1051E000089585E19DE00E94B4091F9281E08F93AC +:1051F0001F9285E08F9387EC9CE09F938F930E9492 +:105200004D0A0F900F900F900F900F900F900895F0 +:105210008330E9F128F4813061F0823009F108959A +:10522000853009F462C008F449C0863009F474C0BE +:10523000089520911501862F90E0820F911D8F3FD8 +:10524000910520F4620F6093150103C08FEF8093E6 +:105250001501809115011F928F9380E09CE072C030 +:1052600020911401862F90E0820F911D8F3F9105B0 +:1052700020F4620F6093140103C08FEF8093140138 +:10528000809114011F928F938EEE9BE05BC0209162 +:105290001301862F90E0820F911D8F3F910520F41E +:1052A000620F6093130103C08FEF8093130180910D +:1052B00013011F928F938BED9BE044C0209112014C +:1052C000862F90E0820F911D8F3F910520F4620F91 +:1052D0006093120103C08FEF80931201809112013D +:1052E0001F928F9386EC9BE02DC020911101862F99 +:1052F00090E0820F911D8F3F910520F4620F609323 +:10530000110103C08FEF80931101809111011F9251 +:105310008F938DEA9BE016C020911001862F90E0BC +:10532000820F911D8F3F910520F4620F6093100151 +:1053300003C08FEF80931001809110011F928F9313 +:1053400082E99BE09F938F930E944D0A0F900F90EC +:105350000F900F900895833081F128F4813059F037 +:105360008230D1F00895853009F449C0B8F1863013 +:1053700009F456C0089580911501681720F4861B22 +:105380008093150102C010921501809115011F92A2 +:105390008F9383E89BE054C080911401681720F438 +:1053A000861B8093140102C0109214018091140195 +:1053B0001F928F9381E79BE043C080911301681790 +:1053C00020F4861B8093130102C010921301809178 +:1053D00013011F928F938EE59BE032C080911201E2 +:1053E000681720F4861B8093120102C010921201EC +:1053F000809112011F928F9389E49BE021C08091DC +:105400001101681720F4861B8093110102C01092CD +:105410001101809111011F928F9380E39BE010C0D6 +:1054200080911001681720F4861B8093100102C040 +:1054300010921001809110011F928F9385E19BE0E3 +:105440009F938F930E944D0A0F900F900F900F9093 +:105450000895CF93C82F1F928F932AE13EE03F9388 +:105460002F930E944D0A61E070E080E090E004C05C +:10547000660F771F881F991FCA95D2F70E942F21A8 +:105480000F900F900F900F90CF910C94351DCF93EC +:105490008D3109F465C0B0F58E3009F4CBC100F54B +:1054A000873009F49BC1A8F4863009F06AC2809164 +:1054B000D701817F8E7F8093D7018FE19EE00E948C +:1054C000B40984E692E10E94B40981E08093E70187 +:1054D00080C1883009F44FC08B3009F47CC151C2BF +:1054E000863109F4EDC138F4803109F4B6C1813157 +:1054F00009F42DC246C2893109F4CBC18B3109F4BC +:1055000086C13FC2853309F434C248F4873209F4B6 +:1055100030C208F430C2893209F42BC232C283345B +:1055200038F48A3308F029C2883309F454C129C2F7 +:10553000833409F41EC2883409F023C20E94351D49 +:1055400083E592E10E94B4099FEF23ED80E391503F +:1055500020408040E1F700C000000E94732439C160 +:1055600083E792E10E94B4090E94402E0E947217C4 +:105570000E94B00F2EC188E692E10E94B40980E338 +:1055800090E10E94B4090E9437261F928F938DE20A +:1055900090E19F938F930E944D0A8BE290E10E94CD +:1055A000B4090E942E26C82F88E190E10E94B40918 +:1055B0001F92CF9323E130E13F932F930E944D0A36 +:1055C00081E190E10E94B40987E090E10E94B40972 +:1055D0008C2F81701F928F9324E030E13F932F93A3 +:1055E0000E944D0A82E090E10E94B40988EF9FE09A +:1055F0000E94B409C1FB882780F91F928F9325EF81 +:105600003FE03F932F930E944D0A83EF9FE00E945B +:10561000B40987EE9FE00E94B409C2FB882780F995 +:105620001F928F9324EE3FE03F932F930E944D0AE9 +:1056300082EE9FE00E94B40989ED9FE00E94B409C8 +:10564000C3FBCC27C0F91F92CF9386ED9FE09F93B9 +:105650008F930E944D0A84ED9FE00E94B4090E943E +:105660004026C82F80EC9FE00E94B4091F92CF9380 +:105670002BEB3FE03F932F930E944D0A89EB9FE075 +:105680000E94B40980EA9FE00E94B4098C2F8170C7 +:105690001F928F932DE93FE03F932F930E944D0A75 +:1056A0008DB79EB780960FB6F8949EBF0FBE8DBF84 +:1056B0008BE99FE00E94B40984E89FE00E94B4094E +:1056C000C1FB882780F91F928F9321E83FE03F9329 +:1056D0002F930E944D0A8FE79FE00E94B4098DE648 +:1056E0009FE00E94B409C2FB882780F91F928F9324 +:1056F0002AE63FE03F932F930E944D0A88E69FE001 +:105700000E94B40986E59FE00E94B409C3FB882784 +:1057100080F91F928F9323E53FE03F932F930E94E0 +:105720004D0A81E59FE00E94B40987E49FE00E9452 +:10573000B409C4FB882780F91F928F9324E43FE0CB +:105740003F932F930E944D0A82E49FE00E94B40988 +:1057500080E39FE00E94B409C5FB882780F91F926F +:105760008F932DE23FE03F932F930E944D0A8BE2EF +:105770009FE00E94B4098FE09FE00E94B409C6FB3D +:10578000882780F91F928F932CE03FE03F932F935F +:105790000E944D0A8AE09FE00E94B40982E09FE0E7 +:1057A0000E94B409C7FBCC27C0F91F92CF938FEF9B +:1057B0009EE09F938F930E944D0A8DEF9EE00E9482 +:1057C000B4098DB79EB74C960FB6F8949EBF0FBE26 +:1057D0008DBFC1E0DBC086E49EE058C08091D70158 +:1057E000C82FC17080FF09C086E492E10E94B4090D +:1057F0008091D701817F8E7F44C08AE392E10E942D +:10580000B4098091D70181608093D701E2CF809164 +:10581000D70181FBCC27C0F991E0C927C0FB81F9F2 +:105820008093D701CC2319F08DE292E125C08FE15E +:1058300092E12CC08091D70182FBCC27C0F991E086 +:10584000C927C0FB82F98093D701CC2319F080E1EE +:1058500092E112C080E092E119C08091D70183FBF0 +:10586000CC27C0F991E0C927C0FB83F98093D70109 +:10587000CC2351F084EF91E10E94B4098091D701CB +:1058800081608093D70182C087EE91E10E94B409C4 +:10589000A0CF88ED91E10E94B4098CEA91E10E94C9 +:1058A000B4098FE691E10E94B40982E491E10E947B +:1058B000B4098EEF90E10E94B40980ED90E1E6CF4B +:1058C00082EC90E10E94B4090E9472171F928F939C +:1058D00088EA90E19F938F930E944D0A80910C017A +:1058E0001F928F9381E990E19F938F930E944D0ABD +:1058F00080916E011F928F938EE790E19F938F931B +:105900000E944D0A80910D011F928F938BE690E1CA +:105910009F938F930E944D0A8091D9019091DA0153 +:10592000A091DB01B091DC01BF93AF939F938F9364 +:1059300087E590E19F938F930E944D0A8DB79EB7A4 +:1059400046960FB6F8949EBF0FBE8DBF42CF0E9401 +:10595000351DC0910D0181E0C827C0930D01CC23F6 +:1059600029F08DE490E10E94B40910C082E490E136 +:105970008DCF80E003C08D5101C089530E94292A38 +:1059800028CF80E490E10E94B409C0E08C2FCF9131 +:10599000089580E0089580E00895CF93C82F809106 +:1059A000E701813081F020F0823009F44CC042C11F +:1059B000A0910E01B0910F018C91813169F082327A +:1059C00009F03AC109C0A0910E01B0910F018C916C +:1059D000813111F0823249F48C2F0E94C92C81113F +:1059E0002FC08C2F0E94472A2CC08C2F0E94CB2CBA +:1059F000811126C0C431E1F070F4CB3081F0C031A8 +:105A0000D1F40E94F12882E19EE00E94B40982E074 +:105A10008093E70115C0C93259F0C83361F48FE1B2 +:105A20009EE00E94B40986E19EE00E94B40908C08D +:105A30001092E70103C180E19EE00E94B409FEC01C +:105A400081E08170FDC0C43220F5CE3108F0C0C0C5 +:105A5000CB3099F1C8F4C73009F0D2C08AE0809306 +:105A6000150194E19093140193E0909313018093B6 +:105A7000120188E08093110188E28093100186EB87 +:105A80009CE00E94B409BFC0C33149F1C431C1F0E8 +:105A9000B7C0CB3409F4A9C028F4C93289F0C8339F +:105AA00061F0AEC0C13509F49EC0C23509F499C099 +:105AB000CE3409F0A5C06AE09EC00E94F128A3C0C0 +:105AC0008091E601882319F01092E6019CC083ECD6 +:105AD0009CE00E94B40981E08093E701B1C08DE9A8 +:105AE0009CE00E94B4098BE89CE00E94B40980917C +:105AF00015011F928F9388E89CE09F938F930E94DB +:105B00004D0A86E89CE00E94B40984E79CE00E946C +:105B1000B409809114011F928F9381E79CE09F93B9 +:105B20008F930E944D0A8FE69CE00E94B40980E6A4 +:105B30009CE00E94B409809113011F928F938DE520 +:105B40009CE09F938F930E944D0A8BE59CE00E94FE +:105B5000B4098AE49CE00E94B409809112011F926A +:105B60008F9387E49CE09F938F930E944D0A85E476 +:105B70009CE00E94B40980E39CE00E94B4098091FB +:105B800011011F928F938DE29CE09F938F930E944F +:105B90004D0A8BE29CE00E94B40984E19CE00E94E3 +:105BA000B409809110011F928F9381E19CE09F9333 +:105BB0008F930E944D0A8FE09CE00E94B4098DB73C +:105BC0009EB748960FB6F8949EBF0FBE8DBF1BC000 +:105BD000CE51EC2FF0E0E15DFE4F80818093E60135 +:105BE00012C061E003C061E006C06AE08091E60196 +:105BF0000E94082908C08091E6010E94AB2903C0D9 +:105C000084EB9CE013C08091E601882369F01F9229 +:105C10008F938EEA9CE09F938F930E944D0A0F9082 +:105C20000F900F900F9004C08BEA9CE00E94B40983 +:105C300081E006C01092E70180E002C080E001CF61 +:105C4000CF910895E1E8F0E08081886080838081D1 +:105C5000816080838FB7F89493E09093890090EDF2 +:105C6000909388008FBF0895EFE6F0E08081826016 +:105C700080830895EFE6F0E080818D7F8083089532 +:105C8000EFE6F0E0808192E08927808308951F92FB +:105C90000F920FB60F9211242F933F934F935F9360 +:105CA0006F937F938F939F93AF93BF93EF93FF93E4 +:105CB0008091E8019091E90101969093E901809328 +:105CC000E801811103C082E00E94B00FE091E90178 +:105CD000E695E695F0E0ED57FD4EE4918091E80100 +:105CE0008E1303C080E00E94B00FFF91EF91BF912F +:105CF000AF919F918F917F916F915F914F913F9164 +:105D00002F910F900FBE0F901F90189504D068949C +:105D1000B1118DC0089570D088F09F5790F0B92FC1 +:105D20009927B751A0F0D1F0660F771F881F991FF0 +:105D30001AF0BA95C9F712C0B13081F077D0B1E04E +:105D4000089574C0672F782F8827B85F39F0B93F5E +:105D5000CCF3869577956795B395D9F73EF49095F2 +:105D60008095709561957F4F8F4F9F4F0895E89470 +:105D700009C097FB3EF490958095709561957F4F93 +:105D80008F4F9F4F9923A9F0F92F96E9BB27939541 +:105D9000F695879577956795B795F111F8CFFAF451 +:105DA000BB0F11F460FF1BC06F5F7F4F8F4F9F4F82 +:105DB00016C0882311F096E911C0772321F09EE8E0 +:105DC000872F762F05C0662371F096E8862F70E046 +:105DD00060E02AF09A95660F771F881FDAF7880F20 +:105DE0009695879597F9089557FD9058440F551F3C +:105DF00059F05F3F71F04795880F97FB991F61F04D +:105E00009F3F79F087950895121613061406551FC3 +:105E1000F2CF4695F1DF08C0161617061806991F2F +:105E2000F1CF86957105610508940895E894BB2724 +:105E300066277727CB0197F908950BD078C069D0F2 +:105E400028F06ED018F0952309F05AC05FC01124D5 +:105E5000EECFCADFA0F3959FD1F3950F50E0551F09 +:105E6000629FF001729FBB27F00DB11D639FAA27AF +:105E7000F00DB11DAA1F649F6627B00DA11D661FFE +:105E8000829F2227B00DA11D621F739FB00DA11D1F +:105E9000621F839FA00D611D221F749F3327A00DD9 +:105EA000611D231F849F600D211D822F762F6A2F75 +:105EB00011249F5750408AF0E1F088234AF0EE0FFA +:105EC000FF1FBB1F661F771F881F91505040A9F707 +:105ED0009E3F510570F014C0AACF5F3FECF3983E8F +:105EE000DCF3869577956795B795F795E7959F5F6E +:105EF000C1F7FE2B880F911D9695879597F9089508 +:105F000097F99F6780E870E060E008959FEF80EC6C +:105F1000089500240A94161617061806090608950F +:105F200000240A9412161306140605060895092E75 +:105F30000394000C11F4882352F0BB0F40F4BF2BE4 +:105F400011F460FF04C06F5F7F4F8F4F9F4F089524 +:105F5000991B79E004C0991F961708F0961B881FBB +:105F60007A95C9F78095089597FB072E16F400944B +:105F700007D077FD09D00E94CE2F07FC05D03EF454 +:105F8000909581959F4F0895709561957F4F0895E5 +:105F9000EE0FFF1F0590F491E02D0994AA1BBB1B87 +:105FA00051E107C0AA1FBB1FA617B70710F0A61B19 +:105FB000B70B881F991F5A95A9F780959095BC013A +:105FC000CD010895F999FECF92BD81BDF89A992728 +:105FD00080B50895A8E1B0E042E050E00C940530AF +:105FE000262FF999FECF1FBA92BD81BD20BD0FB6F5 +:105FF000F894FA9AF99A0FBE019608950E94F02F2C +:10600000272F0C94F12FDC01CB01FC01F999FECF75 +:1060100006C0F2BDE1BDF89A319600B40D92415030 +:0A6020005040B8F70895F894FFCF40 +:10602A002002B10FA2107F104B1018100101C501F8 +:10603A0028080A03140A3F4D362039000AB3097D9D +:10604A00095D0924099708B008C908E2080209018C +:0A605A000203040506070809000010 +:00000001FF -- cgit v1.2.3 From 606d63e602bf5a01912a4c5b9c8536c705bcc777 Mon Sep 17 00:00:00 2001 From: DidierLoiseau Date: Sat, 23 Jan 2016 19:18:37 +0100 Subject: Fixed small issues in README.md - fixed rendering of the basic layer on GitHub - fixed missing Calculator, Mail & Browser Home keys in Fn Layer --- keyboard/ergodox_ez/keymaps/tm2030/README.md | 58 ++++++++++++++-------------- 1 file changed, 30 insertions(+), 28 deletions(-) (limited to 'keyboard') diff --git a/keyboard/ergodox_ez/keymaps/tm2030/README.md b/keyboard/ergodox_ez/keymaps/tm2030/README.md index 55942709be..7ea175b443 100644 --- a/keyboard/ergodox_ez/keymaps/tm2030/README.md +++ b/keyboard/ergodox_ez/keymaps/tm2030/README.md @@ -15,34 +15,36 @@ Some keys had to be moved around to fit into the ErgoDox, especially the `F1`-`F ## Base Layer This is the default layer, close to the TM with the following differences: -- Top row (with the `F`-keys) and rightmost column (with application shortcuts) are removed, the corresponding keys are displaced elsewhere. -- Bottom-left keys are reorganized on a single row as: `Ctrl`, `fn`, `Gui`, `Play`, `App`/`Alt`. -- `shuffle` and `desktop` are not supported. -- `right-shift` is moved on `'`, `\` and on the right thumb (the latter is actually the only _true_ `right-shift`, and must be used in the `Magic` key combination). -- `right-ctrl` is moved on `End`. -- `]` is moved in place of the dash (`-`). -- Dash (`-`) and `=` are moved on bottom right row. -- Arrows and `PgUp`/`PgDn` are moved on the thumbs. - - ,--------------------------------------------------. ,--------------------------------------------------. - | ` | 1 | 2 | 3 | 4 | 5 | Del | | Del | 6 | 7 | 8 | 9 | 0 | ] | - |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| - | Tab | Q | W | E | R | T |Backsp| |Backsp| Y | U | I | O | P | [ | - |--------+------+------+------+------+------|ace | |ace |------+------+------+------+------+--------| - | LShift | A | S | D | F | G |------| |------| H | J | K | L | ; | '/Shift| - |--------+------+------+------+------+------|Enter | |Enter |------+------+------+------+------+--------| - | LShift | Z | X | C | V | B | | | | N | M | , | . | / | \/Shift| - `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' - |LCtrl | fn | LGui | Play |App/Alt| | RAlt | - | Home | = |End/Ctl| - `-----------------------------------' `-----------------------------------' - ,--------------. ,-------------. - |Esc/Alt| num | | Left |Right | - ,------+-------+------| |------+------+------. - | | | PgUp | | Up | | | - |Space |LShift |------| |------|RShift|Space | - | | | PgDn | | Down | | | - `---------------------' `--------------------' + - Top row (with the `F`-keys) and rightmost column (with application shortcuts) are removed, the corresponding keys are displaced elsewhere. + - Bottom-left keys are reorganized on a single row as: `Ctrl`, `fn`, `Gui`, `Play`, `App`/`Alt`. + - `shuffle` and `desktop` are not supported. + - `right-shift` is moved on `'`, `\` and on the right thumb (the latter is actually the only _true_ `right-shift`, and must be used in the `Magic` key combination). + - `right-ctrl` is moved on `End`. + - `]` is moved in place of the dash (`-`). + - Dash (`-`) and `=` are moved on bottom right row. + - Arrows and `PgUp`/`PgDn` are moved on the thumbs. + +``` +,--------------------------------------------------. ,--------------------------------------------------. +| ` | 1 | 2 | 3 | 4 | 5 | Del | | Del | 6 | 7 | 8 | 9 | 0 | ] | +|--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| +| Tab | Q | W | E | R | T |Backsp| |Backsp| Y | U | I | O | P | [ | +|--------+------+------+------+------+------|ace | |ace |------+------+------+------+------+--------| +| LShift | A | S | D | F | G |------| |------| H | J | K | L | ; | '/Shift| +|--------+------+------+------+------+------|Enter | |Enter |------+------+------+------+------+--------| +| LShift | Z | X | C | V | B | | | | N | M | , | . | / | \/Shift| +`--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' + |LCtrl | fn | LGui | Play |App/Alt| | RAlt | - | Home | = |End/Ctl| + `-----------------------------------' `-----------------------------------' + ,--------------. ,-------------. + |Esc/Alt| num | | Left |Right | + ,------+-------+------| |------+------+------. + | | | PgUp | | Up | | | + |Space |LShift |------| |------|RShift|Space | + | | | PgDn | | Down | | | + `---------------------' `--------------------' +``` ### Layer Switching - Use `num` to toggle the Numeric Layer. @@ -118,7 +120,7 @@ Note: the `eject` key does not work due to jackhumbert/qmk_firmware#82 |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| | | | | | | |VolUp | | | | | | | | Pause | |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| - | | | | | | |------| |------| | | | | | | + | | | | Calc | Mail |Browsr|------| |------| | | | | | | |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| | | | cut | copy |paste | Mute |VolDn | | | | | | | | | `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' -- cgit v1.2.3 From 3e31fa4c50562b0d441262963ac6489351e7035d Mon Sep 17 00:00:00 2001 From: DidierLoiseau Date: Sat, 23 Jan 2016 19:29:14 +0100 Subject: Fixed rendering of the Layer Switching section --- keyboard/ergodox_ez/keymaps/tm2030/README.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'keyboard') diff --git a/keyboard/ergodox_ez/keymaps/tm2030/README.md b/keyboard/ergodox_ez/keymaps/tm2030/README.md index 7ea175b443..096939dc28 100644 --- a/keyboard/ergodox_ez/keymaps/tm2030/README.md +++ b/keyboard/ergodox_ez/keymaps/tm2030/README.md @@ -48,7 +48,8 @@ This is the default layer, close to the TM with the following differences: ### Layer Switching - Use `num` to toggle the Numeric Layer. -- Hold `fn` to temporarily activate the Numeric & Fn Layers +- Hold `fn` to temporarily activate the Numeric & Fn Layers. + As on the original TM 2030, when `num` layer is activated, holding `fn` disables it but enables the other `fn` keys. ## Dvorak Layer -- cgit v1.2.3 From ae620fe8562254a5c00a48b863cabd4c87abd613 Mon Sep 17 00:00:00 2001 From: Jack Humbert Date: Sat, 23 Jan 2016 20:35:13 -0500 Subject: rename file --- keyboard/planck/keymaps/keymap_eric.c | 42 ----------------------------------- 1 file changed, 42 deletions(-) delete mode 100644 keyboard/planck/keymaps/keymap_eric.c (limited to 'keyboard') diff --git a/keyboard/planck/keymaps/keymap_eric.c b/keyboard/planck/keymaps/keymap_eric.c deleted file mode 100644 index ffeec5f805..0000000000 --- a/keyboard/planck/keymaps/keymap_eric.c +++ /dev/null @@ -1,42 +0,0 @@ -#include "planck.h" - -const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { - [0] = { - {KC_BSLS, S(KC_SLSH), KC_COMM, KC_DOT, KC_P, KC_Y, KC_F, KC_G, KC_C, KC_R, KC_L, KC_SLSH}, - {TG(1), KC_A, KC_O, KC_E, KC_U, KC_I, KC_D, KC_H, KC_T, KC_N, KC_S, KC_MINS}, - {KC_LGUI, KC_QUOT, KC_Q, KC_J, KC_K, KC_X, KC_B, KC_M, KC_W, KC_V, KC_Z, KC_RGUI}, - {KC_LCBR, KC_LCTL, KC_LALT, LT(1, TG(2)), KC_SPC, KC_TAB, KC_ENT, KC_BSPC, LT(1, TG(3)), KC_RALT, KC_RCTL, KC_RCBR} - }, - - [1] = { - {KC_PIPE, KC_COLN, KC_LBRC, KC_RBRC, S(KC_P), S(KC_Y), S(KC_F), S(KC_G), S(KC_C), S(KC_R), S(KC_L), KC_AMPR}, - {KC_TRNS, S(KC_A), S(KC_O), S(KC_E), S(KC_U), S(KC_I), S(KC_D), S(KC_H), S(KC_T), S(KC_N), S(KC_S), KC_GRV}, - {KC_TRNS, KC_SCLN, S(KC_Q), S(KC_J), S(KC_K), S(KC_X), S(KC_B), S(KC_M), S(KC_W), S(KC_V), S(KC_Z), KC_TRNS}, - {S(KC_COMM), KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, S(KC_DOT)} - }, - - [2] = { - {KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_NO}, - {KC_NO, KC_F11, KC_F12, KC_F13, KC_F14, KC_F15, KC_F16, KC_F17, KC_F18, KC_F19, KC_F20, KC_NO}, - {KC_TRNS, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_TRNS}, - {KC_NO, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_NO} - }, - - [3] = { - {KC_EXLM, KC_7, KC_5, KC_3, KC_1, KC_9, KC_0, KC_2, KC_4, KC_6, KC_8, KC_EQL}, - {TG(4), KC_NO, KC_PGUP, KC_HOME, KC_INSERT, KC_NO, KC_NO, BL_DEC, KC_UP, BL_INC, KC_NO, KC_NO}, - {KC_TRNS, KC_NO, KC_PGDN, KC_END, KC_DELETE, KC_NO, KC_NO, KC_LEFT, KC_DOWN, KC_RGHT, KC_NO, KC_TRNS}, - {KC_NO, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_NO} - }, - - [4] = { - {KC_TILD, KC_HASH, KC_LPRN, KC_RPRN, S(KC_QUOT), KC_PERC, KC_UNDS, KC_CIRC, KC_DLR, KC_AT, KC_ASTR, KC_PLUS}, - {KC_TRNS, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO}, - {KC_TRNS, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_TRNS}, - {KC_NO, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_NO} - } -}; - -const uint16_t PROGMEM fn_actions[] = { - -}; \ No newline at end of file -- cgit v1.2.3 From 6a55a5fe484f15f37e790e276cb77ae06b534358 Mon Sep 17 00:00:00 2001 From: Jack Humbert Date: Sat, 23 Jan 2016 20:40:40 -0500 Subject: not sure how this got here.. --- keyboard/ergodox_ez/keymaps/keymap_generated.c | 78 -------------------------- 1 file changed, 78 deletions(-) delete mode 100644 keyboard/ergodox_ez/keymaps/keymap_generated.c (limited to 'keyboard') diff --git a/keyboard/ergodox_ez/keymaps/keymap_generated.c b/keyboard/ergodox_ez/keymaps/keymap_generated.c deleted file mode 100644 index 54fd3059f2..0000000000 --- a/keyboard/ergodox_ez/keymaps/keymap_generated.c +++ /dev/null @@ -1,78 +0,0 @@ -#include "ergodox_ez.h" -#include "debug.h" -#include "action_layer.h" - -const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { - -// If it accepts an argument (i.e, is a function), it doesn't need KC_. -// Otherwise, it needs KC_* - -#define SYMB 0 - -[0] = KEYMAP( \ -\ -KC_KP_EQUAL, KC_1, KC_2, KC_3, KC_4, KC_5, KC_LEFT, KC_DELETE, KC_Q, KC_W, KC_E, KC_R, KC_T, TG(1), KC_BSPACE, KC_A, KC_S, KC_D, KC_F, KC_G, KC_LSHIFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TAB, KC_LEFT, KC_RIGHT, KC_TRANSPARENT, KC_LGUI, KC_HOME, KC_SPACE, KC_BSPACE, KC_END, KC_RIGHT, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINUS, TG(1), KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSLASH, KC_H, KC_J, KC_K, KC_L, KC_SCOLON, KC_QUOTE, KC_TRANSPARENT, KC_N, KC_M, KC_COMMA, KC_DOT, KC_LCTRL, KC_LSHIFT, KC_UP, KC_DOWN, KC_LBRACKET, KC_RBRACKET, KC_TRANSPARENT, KC_LALT, KC_ESCAPE, KC_PGUP, KC_PGDOWN, KC_TAB, KC_ENTER \ -\ -), - -[1] = KEYMAP( \ -\ -KC_TRANSPARENT, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_TRANSPARENT, KC_UP, KC_KP_7, KC_KP_8, KC_KP_9, KC_KP_ASTERISK, KC_F12, KC_DOWN, KC_KP_4, KC_KP_5, KC_KP_6, KC_KP_PLUS, KC_TRANSPARENT, KC_TRANSPARENT, , KC_KP_1, KC_KP_2, KC_KP_3, KC_KP_SLASH, KC_TRANSPARENT, KC_TRANSPARENT, KC_KP_DOT, KC_KP_0, KC_KP_EQUAL, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT \ -\ -), - -[2] = KEYMAP( \ -\ -KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_MS_UP, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_MS_LEFT, KC_MS_DOWN, KC_MS_RIGHT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_MS_BTN3, KC_MS_BTN2, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_MEDIA_PLAY_PAUSE, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_MEDIA_PREV_TRACK, KC_MEDIA_NEXT_TRACK, KC_TRANSPARENT, KC_TRANSPARENT, KC_AUDIO_VOL_UP, KC_AUDIO_VOL_DOWN, KC_AUDIO_MUTE, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT \ -\ -), - -}; - -const uint16_t PROGMEM fn_actions[] = { - [1] = ACTION_LAYER_TAP_TOGGLE(SYMB) // FN1 - Momentary Layer 1 (Symbols) -}; - -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; -}; - -// 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; - } - -}; -- cgit v1.2.3 From fd72a46c139c0450299e6e4ebbf4ffba531c9e2d Mon Sep 17 00:00:00 2001 From: Jack Humbert Date: Sat, 23 Jan 2016 20:52:01 -0500 Subject: Makefile back to defaults --- keyboard/planck/Makefile | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'keyboard') diff --git a/keyboard/planck/Makefile b/keyboard/planck/Makefile index dece6a7f17..8414b2ccc0 100644 --- a/keyboard/planck/Makefile +++ b/keyboard/planck/Makefile @@ -138,9 +138,9 @@ 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 = yes # Breathing sleep LED during USB suspend # NKRO_ENABLE = yes # USB Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work -# BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality -MIDI_ENABLE = YES # MIDI controls -AUDIO_ENABLE = YES # Audio output on port C6 +BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality +# MIDI_ENABLE = YES # MIDI controls +# AUDIO_ENABLE = YES # Audio output on port C6 # UNICODE_ENABLE = YES # Unicode # BLUETOOTH_ENABLE = yes # Enable Bluetooth with the Adafruit EZ-Key HID -- cgit v1.2.3 From 0a40654b82520849fcc587e8fb76c823378649a6 Mon Sep 17 00:00:00 2001 From: Yang Liu Date: Sun, 24 Jan 2016 13:14:50 -0800 Subject: Add support for WS2812 LEDs --- keyboard/planck/Makefile | 13 +- keyboard/planck/config.h | 15 + keyboard/planck/keymaps/yang/keymap.c | 146 ++++++++++ keyboard/planck/light_ws2812.c | 181 ++++++++++++ keyboard/planck/light_ws2812.h | 73 +++++ keyboard/planck/planck.c | 7 +- keyboard/planck/planck.h | 9 +- keyboard/planck/rgblight.c | 505 ++++++++++++++++++++++++++++++++++ keyboard/planck/rgblight.h | 87 ++++++ 9 files changed, 1029 insertions(+), 7 deletions(-) create mode 100644 keyboard/planck/keymaps/yang/keymap.c create mode 100755 keyboard/planck/light_ws2812.c create mode 100755 keyboard/planck/light_ws2812.h create mode 100644 keyboard/planck/rgblight.c create mode 100644 keyboard/planck/rgblight.h (limited to 'keyboard') diff --git a/keyboard/planck/Makefile b/keyboard/planck/Makefile index 8414b2ccc0..d37005260a 100644 --- a/keyboard/planck/Makefile +++ b/keyboard/planck/Makefile @@ -27,7 +27,7 @@ # make flip-ee = Download the eeprom file to the device, using Atmel FLIP # (must have Atmel FLIP installed). # -# make debug = Start either simulavr or avarice as specified for debugging, +# make debug = Start either simulavr or avarice as specified for debugging, # with avr-gdb or avr-insight as the front end for debugging. # # make filename.s = Just compile filename.c into the assembler code only. @@ -137,17 +137,25 @@ 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 = yes # Breathing sleep LED during USB suspend -# NKRO_ENABLE = yes # USB Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work +NKRO_ENABLE = yes # USB Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality # MIDI_ENABLE = YES # MIDI controls # AUDIO_ENABLE = YES # Audio output on port C6 # UNICODE_ENABLE = YES # Unicode # BLUETOOTH_ENABLE = yes # Enable Bluetooth with the Adafruit EZ-Key HID +RGBLIGHT_ENABLE = yes # Enable WS2812 bottom RGB light ifdef BACKLIGHT_ENABLE SRC += backlight.c endif +ifdef RGBLIGHT_ENABLE + SRC += light_ws2812.c + SRC += rgblight.c + OPT_DEFS += -DRGBLIGHT_ENABLE +endif + + # Optimize size but this may cause error "relocation truncated to fit" #EXTRALDFLAGS = -Wl,--relax @@ -157,4 +165,3 @@ VPATH += $(TOP_DIR) VPATH += $(TMK_DIR) include $(TOP_DIR)/quantum/quantum.mk - diff --git a/keyboard/planck/config.h b/keyboard/planck/config.h index a4c711db82..856de73066 100644 --- a/keyboard/planck/config.h +++ b/keyboard/planck/config.h @@ -58,6 +58,21 @@ along with this program. If not, see . keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \ ) +/* ws2812 RGB LED */ +#define ws2812_PORTREG PORTD +#define ws2812_DDRREG DDRD +#define ws2812_pin PD1 +#define RGBLED_NUM 28 // Number of LEDs +#ifndef RGBLIGHT_HUE_STEP +#define RGBLIGHT_HUE_STEP 10 +#endif +#ifndef RGBLIGHT_SAT_STEP +#define RGBLIGHT_SAT_STEP 17 +#endif +#ifndef RGBLIGHT_VAL_STEP +#define RGBLIGHT_VAL_STEP 17 +#endif + /* * Feature disable options * These options are also useful to firmware size reduction. diff --git a/keyboard/planck/keymaps/yang/keymap.c b/keyboard/planck/keymaps/yang/keymap.c new file mode 100644 index 0000000000..541b1a57e4 --- /dev/null +++ b/keyboard/planck/keymaps/yang/keymap.c @@ -0,0 +1,146 @@ +// 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" +#ifdef BACKLIGHT_ENABLE + #include "backlight.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 _QW 0 +#define _CM 1 +#define _DV 2 +#define _LW 3 +#define _RS 4 +#define _RGB 5 + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { +[_QW] = { /* 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 }, + {M(0), KC_LCTL, KC_LALT, KC_LGUI, MO(_LW), F(0), F(0), MO(_RS), KC_LEFT, KC_DOWN, KC_UP, KC_RGHT} +}, +[_CM] = { /* 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 }, + {M(0), KC_LCTL, KC_LALT, KC_LGUI, MO(_LW), F(0), F(0), MO(_RS), KC_LEFT, KC_DOWN, KC_UP, KC_RGHT} +}, +[_DV] = { /* 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 }, + {M(0), KC_LCTL, KC_LALT, KC_LGUI, MO(_LW), F(0), F(0), MO(_RS), KC_LEFT, KC_DOWN, KC_UP, KC_RGHT} +}, +[_RS] = { /* 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_TRNS, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS}, + {KC_TRNS, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, DF(_QW), DF(_CM), DF(_DV), RESET, KC_TRNS}, + {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY} +}, +[_LW] = { /* 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_TRNS, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE}, + {KC_TRNS, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, DF(_QW), DF(_CM), DF(_DV), RESET, KC_TRNS}, + {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY} +}, +[_RGB] = { /* RGBLIGHT */ + {KC_TRNS, KC_PGUP, KC_UP, KC_PGDN, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_DEL}, + {KC_TRNS, KC_LEFT, KC_DOWN, KC_RGHT, KC_TRNS, KC_HOME, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, KC_END, KC_TRNS}, + {KC_TRNS, F(1), F(2), F(3), F(4), F(5), F(6), F(7), F(8), 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} + +} +}; + +enum function_id { + RGBLED_TOGGLE, + RGBLED_STEP_MODE, + RGBLED_INCREASE_HUE, + RGBLED_DECREASE_HUE, + RGBLED_INCREASE_SAT, + RGBLED_DECREASE_SAT, + RGBLED_INCREASE_VAL, + RGBLED_DECREASE_VAL, +}; + +const uint16_t PROGMEM fn_actions[] = { + [0] = ACTION_LAYER_TAP_KEY(_RGB, KC_SPC), + [1] = ACTION_FUNCTION(RGBLED_TOGGLE), + [2] = ACTION_FUNCTION(RGBLED_STEP_MODE), + [3] = ACTION_FUNCTION(RGBLED_INCREASE_HUE), + [4] = ACTION_FUNCTION(RGBLED_DECREASE_HUE), + [5] = ACTION_FUNCTION(RGBLED_INCREASE_SAT), + [6] = ACTION_FUNCTION(RGBLED_DECREASE_SAT), + [7] = ACTION_FUNCTION(RGBLED_INCREASE_VAL), + [8] = ACTION_FUNCTION(RGBLED_DECREASE_VAL), +}; + +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); + #ifdef BACKLIGHT_ENABLE + backlight_step(); + #endif + } else { + unregister_code(KC_RSFT); + } + break; + } + return MACRO_NONE; +}; + +void action_function(keyrecord_t *record, uint8_t id, uint8_t opt) { + switch (id) { + case RGBLED_TOGGLE: + //led operations + if (record->event.pressed) { + rgblight_toggle(); + } + + break; + case RGBLED_INCREASE_HUE: + if (record->event.pressed) { + rgblight_increase_hue(); + } + break; + case RGBLED_DECREASE_HUE: + if (record->event.pressed) { + rgblight_decrease_hue(); + } + break; + case RGBLED_INCREASE_SAT: + if (record->event.pressed) { + rgblight_increase_sat(); + } + break; + case RGBLED_DECREASE_SAT: + if (record->event.pressed) { + rgblight_decrease_sat(); + } + break; + case RGBLED_INCREASE_VAL: + if (record->event.pressed) { + rgblight_increase_val(); + } + break; + case RGBLED_DECREASE_VAL: + if (record->event.pressed) { + rgblight_decrease_val(); + } + break; + case RGBLED_STEP_MODE: + if (record->event.pressed) { + rgblight_step(); + } + break; + } +} diff --git a/keyboard/planck/light_ws2812.c b/keyboard/planck/light_ws2812.c new file mode 100755 index 0000000000..f20043067e --- /dev/null +++ b/keyboard/planck/light_ws2812.c @@ -0,0 +1,181 @@ +/* +* light weight WS2812 lib V2.0b +* +* Controls WS2811/WS2812/WS2812B RGB-LEDs +* Author: Tim (cpldcpu@gmail.com) +* +* Jan 18th, 2014 v2.0b Initial Version +* Nov 29th, 2015 v2.3 Added SK6812RGBW support +* +* License: GNU GPL v2 (see License.txt) +*/ + +#include "light_ws2812.h" +#include +#include +#include +#include "debug.h" + +// Setleds for standard RGB +void inline ws2812_setleds(struct cRGB *ledarray, uint16_t leds) +{ + ws2812_setleds_pin(ledarray,leds, _BV(ws2812_pin)); +} + +void inline ws2812_setleds_pin(struct cRGB *ledarray, uint16_t leds, uint8_t pinmask) +{ + ws2812_DDRREG |= pinmask; // Enable DDR + ws2812_sendarray_mask((uint8_t*)ledarray,leds+leds+leds,pinmask); + _delay_us(50); +} + +// Setleds for SK6812RGBW +void inline ws2812_setleds_rgbw(struct cRGBW *ledarray, uint16_t leds) +{ + ws2812_DDRREG |= _BV(ws2812_pin); // Enable DDR + ws2812_sendarray_mask((uint8_t*)ledarray,leds<<2,_BV(ws2812_pin)); + _delay_us(80); +} + +void ws2812_sendarray(uint8_t *data,uint16_t datlen) +{ + ws2812_sendarray_mask(data,datlen,_BV(ws2812_pin)); +} + +/* + This routine writes an array of bytes with RGB values to the Dataout pin + using the fast 800kHz clockless WS2811/2812 protocol. +*/ + +// Timing in ns +#define w_zeropulse 350 +#define w_onepulse 900 +#define w_totalperiod 1250 + +// Fixed cycles used by the inner loop +#define w_fixedlow 2 +#define w_fixedhigh 4 +#define w_fixedtotal 8 + +// Insert NOPs to match the timing, if possible +#define w_zerocycles (((F_CPU/1000)*w_zeropulse )/1000000) +#define w_onecycles (((F_CPU/1000)*w_onepulse +500000)/1000000) +#define w_totalcycles (((F_CPU/1000)*w_totalperiod +500000)/1000000) + +// w1 - nops between rising edge and falling edge - low +#define w1 (w_zerocycles-w_fixedlow) +// w2 nops between fe low and fe high +#define w2 (w_onecycles-w_fixedhigh-w1) +// w3 nops to complete loop +#define w3 (w_totalcycles-w_fixedtotal-w1-w2) + +#if w1>0 + #define w1_nops w1 +#else + #define w1_nops 0 +#endif + +// The only critical timing parameter is the minimum pulse length of the "0" +// Warn or throw error if this timing can not be met with current F_CPU settings. +#define w_lowtime ((w1_nops+w_fixedlow)*1000000)/(F_CPU/1000) +#if w_lowtime>550 + #error "Light_ws2812: Sorry, the clock speed is too low. Did you set F_CPU correctly?" +#elif w_lowtime>450 + #warning "Light_ws2812: The timing is critical and may only work on WS2812B, not on WS2812(S)." + #warning "Please consider a higher clockspeed, if possible" +#endif + +#if w2>0 +#define w2_nops w2 +#else +#define w2_nops 0 +#endif + +#if w3>0 +#define w3_nops w3 +#else +#define w3_nops 0 +#endif + +#define w_nop1 "nop \n\t" +#define w_nop2 "rjmp .+0 \n\t" +#define w_nop4 w_nop2 w_nop2 +#define w_nop8 w_nop4 w_nop4 +#define w_nop16 w_nop8 w_nop8 + +void inline ws2812_sendarray_mask(uint8_t *data,uint16_t datlen,uint8_t maskhi) +{ + uint8_t curbyte,ctr,masklo; + uint8_t sreg_prev; + + masklo =~maskhi&ws2812_PORTREG; + maskhi |= ws2812_PORTREG; + sreg_prev=SREG; + cli(); + + while (datlen--) { + curbyte=*data++; + + asm volatile( + " ldi %0,8 \n\t" + "loop%=: \n\t" + " out %2,%3 \n\t" // '1' [01] '0' [01] - re +#if (w1_nops&1) +w_nop1 +#endif +#if (w1_nops&2) +w_nop2 +#endif +#if (w1_nops&4) +w_nop4 +#endif +#if (w1_nops&8) +w_nop8 +#endif +#if (w1_nops&16) +w_nop16 +#endif + " sbrs %1,7 \n\t" // '1' [03] '0' [02] + " out %2,%4 \n\t" // '1' [--] '0' [03] - fe-low + " lsl %1 \n\t" // '1' [04] '0' [04] +#if (w2_nops&1) + w_nop1 +#endif +#if (w2_nops&2) + w_nop2 +#endif +#if (w2_nops&4) + w_nop4 +#endif +#if (w2_nops&8) + w_nop8 +#endif +#if (w2_nops&16) + w_nop16 +#endif + " out %2,%4 \n\t" // '1' [+1] '0' [+1] - fe-high +#if (w3_nops&1) +w_nop1 +#endif +#if (w3_nops&2) +w_nop2 +#endif +#if (w3_nops&4) +w_nop4 +#endif +#if (w3_nops&8) +w_nop8 +#endif +#if (w3_nops&16) +w_nop16 +#endif + + " dec %0 \n\t" // '1' [+2] '0' [+2] + " brne loop%=\n\t" // '1' [+3] '0' [+4] + : "=&d" (ctr) + : "r" (curbyte), "I" (_SFR_IO_ADDR(ws2812_PORTREG)), "r" (maskhi), "r" (masklo) + ); + } + + SREG=sreg_prev; +} diff --git a/keyboard/planck/light_ws2812.h b/keyboard/planck/light_ws2812.h new file mode 100755 index 0000000000..54eef22d9e --- /dev/null +++ b/keyboard/planck/light_ws2812.h @@ -0,0 +1,73 @@ +/* + * light weight WS2812 lib include + * + * Version 2.3 - Nev 29th 2015 + * Author: Tim (cpldcpu@gmail.com) + * + * Please do not change this file! All configuration is handled in "ws2812_config.h" + * + * License: GNU GPL v2 (see License.txt) + + + */ + +#ifndef LIGHT_WS2812_H_ +#define LIGHT_WS2812_H_ + +#include +#include +//#include "ws2812_config.h" + +/* + * Structure of the LED array + * + * cRGB: RGB for WS2812S/B/C/D, SK6812, SK6812Mini, SK6812WWA, APA104, APA106 + * cRGBW: RGBW for SK6812RGBW + */ + +struct cRGB { uint8_t g; uint8_t r; uint8_t b; }; +struct cRGBW { uint8_t g; uint8_t r; uint8_t b; uint8_t w;}; + + + +/* User Interface + * + * Input: + * ledarray: An array of GRB data describing the LED colors + * number_of_leds: The number of LEDs to write + * pinmask (optional): Bitmask describing the output bin. e.g. _BV(PB0) + * + * The functions will perform the following actions: + * - Set the data-out pin as output + * - Send out the LED data + * - Wait 50�s to reset the LEDs + */ + +void ws2812_setleds (struct cRGB *ledarray, uint16_t number_of_leds); +void ws2812_setleds_pin (struct cRGB *ledarray, uint16_t number_of_leds,uint8_t pinmask); +void ws2812_setleds_rgbw(struct cRGBW *ledarray, uint16_t number_of_leds); + +/* + * Old interface / Internal functions + * + * The functions take a byte-array and send to the data output as WS2812 bitstream. + * The length is the number of bytes to send - three per LED. + */ + +void ws2812_sendarray (uint8_t *array,uint16_t length); +void ws2812_sendarray_mask(uint8_t *array,uint16_t length, uint8_t pinmask); + + +/* + * Internal defines + */ +#ifndef CONCAT +#define CONCAT(a, b) a ## b +#endif +#ifndef CONCAT_EXP +#define CONCAT_EXP(a, b) CONCAT(a, b) +#endif + +// #define ws2812_PORTREG CONCAT_EXP(PORT,ws2812_port) +// #define ws2812_DDRREG CONCAT_EXP(DDR,ws2812_port) + +#endif /* LIGHT_WS2812_H_ */ diff --git a/keyboard/planck/planck.c b/keyboard/planck/planck.c index b62862af04..63ca54761c 100644 --- a/keyboard/planck/planck.c +++ b/keyboard/planck/planck.c @@ -15,6 +15,11 @@ void * matrix_init_kb(void) { backlight_init_ports(); #endif + #ifdef RGBLIGHT_ENABLE + rgblight_init(); + #endif + + // Turn status LED on DDRE |= (1<<6); PORTE |= (1<<6); @@ -28,4 +33,4 @@ void * matrix_scan_kb(void) { if (matrix_scan_user) { (*matrix_scan_user)(); } -}; \ No newline at end of file +}; diff --git a/keyboard/planck/planck.h b/keyboard/planck/planck.h index e775ea7c62..00b01b54df 100644 --- a/keyboard/planck/planck.h +++ b/keyboard/planck/planck.h @@ -6,6 +6,9 @@ #ifdef BACKLIGHT_ENABLE #include "backlight.h" #endif +#ifdef RGBLIGHT_ENABLE + #include "rgblight.h" +#endif #include #ifdef MIDI_ENABLE #include @@ -22,7 +25,7 @@ { 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, k35, k37, k38, k39, k3a, k3b } \ -} +} #define PLANCK_GRID( \ k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, \ @@ -35,9 +38,9 @@ { 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 } \ -} +} void * matrix_init_user(void); void * matrix_scan_user(void); -#endif \ No newline at end of file +#endif diff --git a/keyboard/planck/rgblight.c b/keyboard/planck/rgblight.c new file mode 100644 index 0000000000..552456aae3 --- /dev/null +++ b/keyboard/planck/rgblight.c @@ -0,0 +1,505 @@ +#include +#include +#include +#include "progmem.h" +#include "timer.h" +#include "rgblight.h" +#include "debug.h" + +const uint8_t DIM_CURVE[] PROGMEM = { + 0, 1, 1, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4, 4, + 4, 4, 4, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 6, 6, 6, + 6, 6, 6, 6, 6, 7, 7, 7, 7, 7, 7, 7, 8, 8, 8, 8, + 8, 8, 9, 9, 9, 9, 9, 9, 10, 10, 10, 10, 10, 11, 11, 11, + 11, 11, 12, 12, 12, 12, 12, 13, 13, 13, 13, 14, 14, 14, 14, 15, + 15, 15, 16, 16, 16, 16, 17, 17, 17, 18, 18, 18, 19, 19, 19, 20, + 20, 20, 21, 21, 22, 22, 22, 23, 23, 24, 24, 25, 25, 25, 26, 26, + 27, 27, 28, 28, 29, 29, 30, 30, 31, 32, 32, 33, 33, 34, 35, 35, + 36, 36, 37, 38, 38, 39, 40, 40, 41, 42, 43, 43, 44, 45, 46, 47, + 48, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, + 63, 64, 65, 66, 68, 69, 70, 71, 73, 74, 75, 76, 78, 79, 81, 82, + 83, 85, 86, 88, 90, 91, 93, 94, 96, 98, 99, 101, 103, 105, 107, 109, + 110, 112, 114, 116, 118, 121, 123, 125, 127, 129, 132, 134, 136, 139, 141, 144, + 146, 149, 151, 154, 157, 159, 162, 165, 168, 171, 174, 177, 180, 183, 186, 190, + 193, 196, 200, 203, 207, 211, 214, 218, 222, 226, 230, 234, 238, 242, 248, 255, +}; +const uint8_t RGBLED_BREATHING_TABLE[] PROGMEM = {0,0,0,0,1,1,1,2,2,3,4,5,5,6,7,9,10,11,12,14,15,17,18,20,21,23,25,27,29,31,33,35,37,40,42,44,47,49,52,54,57,59,62,65,67,70,73,76,79,82,85,88,90,93,97,100,103,106,109,112,115,118,121,124,127,131,134,137,140,143,146,149,152,155,158,162,165,167,170,173,176,179,182,185,188,190,193,196,198,201,203,206,208,211,213,215,218,220,222,224,226,228,230,232,234,235,237,238,240,241,243,244,245,246,248,249,250,250,251,252,253,253,254,254,254,255,255,255,255,255,255,255,254,254,254,253,253,252,251,250,250,249,248,246,245,244,243,241,240,238,237,235,234,232,230,228,226,224,222,220,218,215,213,211,208,206,203,201,198,196,193,190,188,185,182,179,176,173,170,167,165,162,158,155,152,149,146,143,140,137,134,131,128,124,121,118,115,112,109,106,103,100,97,93,90,88,85,82,79,76,73,70,67,65,62,59,57,54,52,49,47,44,42,40,37,35,33,31,29,27,25,23,21,20,18,17,15,14,12,11,10,9,7,6,5,5,4,3,2,2,1,1,1,0,0,0}; +const uint8_t RGBLED_BREATHING_INTERVALS[] PROGMEM = {30, 20, 10, 5}; +const uint8_t RGBLED_RAINBOW_MOOD_INTERVALS[] PROGMEM = {120, 60, 30}; +const uint8_t RGBLED_RAINBOW_SWIRL_INTERVALS[] PROGMEM = {100, 50, 20}; +const uint8_t RGBLED_SNAKE_INTERVALS[] PROGMEM = {100, 50, 20}; +const uint8_t RGBLED_KNIGHT_INTERVALS[] PROGMEM = {100, 50, 20}; + +rgblight_config_t rgblight_config; +rgblight_config_t inmem_config; +struct cRGB led[RGBLED_NUM]; +uint8_t rgblight_inited = 0; + + +void sethsv(uint16_t hue, uint8_t sat, uint8_t val, struct cRGB *led1) { + /* convert hue, saturation and brightness ( HSB/HSV ) to RGB + The DIM_CURVE is used only on brightness/value and on saturation (inverted). + This looks the most natural. + */ + uint8_t r, g, b; + + val = pgm_read_byte(&DIM_CURVE[val]); + sat = 255 - pgm_read_byte(&DIM_CURVE[255 - sat]); + + uint8_t base; + + if (sat == 0) { // Acromatic color (gray). Hue doesn't mind. + r = val; + g = val; + b = val; + } else { + base = ((255 - sat) * val) >> 8; + + switch (hue / 60) { + case 0: + r = val; + g = (((val - base)*hue) / 60) + base; + b = base; + break; + + case 1: + r = (((val - base)*(60 - (hue % 60))) / 60) + base; + g = val; + b = base; + break; + + case 2: + r = base; + g = val; + b = (((val - base)*(hue % 60)) / 60) + base; + break; + + case 3: + r = base; + g = (((val - base)*(60 - (hue % 60))) / 60) + base; + b = val; + break; + + case 4: + r = (((val - base)*(hue % 60)) / 60) + base; + g = base; + b = val; + break; + + case 5: + r = val; + g = base; + b = (((val - base)*(60 - (hue % 60))) / 60) + base; + break; + } + } + setrgb(r,g,b, led1); +} + +void setrgb(uint8_t r, uint8_t g, uint8_t b, struct cRGB *led1) { + (*led1).r = r; + (*led1).g = g; + (*led1).b = b; +} + + +uint32_t eeconfig_read_rgblight(void) { + return eeprom_read_dword(EECONFIG_RGBLIGHT); +} +void eeconfig_write_rgblight(uint32_t val) { + eeprom_write_dword(EECONFIG_RGBLIGHT, val); +} +void eeconfig_write_rgblight_default(void) { + dprintf("eeconfig_write_rgblight_default\n"); + rgblight_config.enable = 1; + rgblight_config.mode = 1; + rgblight_config.hue = 200; + rgblight_config.sat = 204; + rgblight_config.val = 204; + eeconfig_write_rgblight(rgblight_config.raw); +} +void eeconfig_debug_rgblight(void) { + dprintf("rgblight_config eprom\n"); + dprintf("rgblight_config.enable = %d\n", rgblight_config.enable); + dprintf("rghlight_config.mode = %d\n", rgblight_config.mode); + dprintf("rgblight_config.hue = %d\n", rgblight_config.hue); + dprintf("rgblight_config.sat = %d\n", rgblight_config.sat); + dprintf("rgblight_config.val = %d\n", rgblight_config.val); +} + +void rgblight_init(void) { + debug_enable = 1; // Debug ON! + dprintf("rgblight_init called.\n"); + rgblight_inited = 1; + dprintf("rgblight_init start!\n"); + if (!eeconfig_is_enabled()) { + dprintf("rgblight_init eeconfig is not enabled.\n"); + eeconfig_init(); + eeconfig_write_rgblight_default(); + } + rgblight_config.raw = eeconfig_read_rgblight(); + if (!rgblight_config.mode) { + dprintf("rgblight_init rgblight_config.mode = 0. Write default values to EEPROM.\n"); + eeconfig_write_rgblight_default(); + rgblight_config.raw = eeconfig_read_rgblight(); + } + eeconfig_debug_rgblight(); // display current eeprom values + + rgblight_timer_init(); // setup the timer + + if (rgblight_config.enable) { + rgblight_mode(rgblight_config.mode); + } +} + +void rgblight_increase(void) { + uint8_t mode; + if (rgblight_config.mode < RGBLIGHT_MODES) { + mode = rgblight_config.mode + 1; + } + rgblight_mode(mode); +} + +void rgblight_decrease(void) { + uint8_t mode; + if (rgblight_config.mode > 1) { //mode will never < 1, if mode is less than 1, eeprom need to be initialized. + mode = rgblight_config.mode-1; + } + rgblight_mode(mode); +} + +void rgblight_step(void) { + uint8_t mode; + mode = rgblight_config.mode + 1; + if (mode > RGBLIGHT_MODES) { + mode = 1; + } + rgblight_mode(mode); +} + +void rgblight_mode(uint8_t mode) { + if (!rgblight_config.enable) { + return; + } + if (mode<1) { + rgblight_config.mode = 1; + } else if (mode > RGBLIGHT_MODES) { + rgblight_config.mode = RGBLIGHT_MODES; + } else { + rgblight_config.mode = mode; + } + eeconfig_write_rgblight(rgblight_config.raw); + dprintf("rgblight mode: %u\n", rgblight_config.mode); + if (rgblight_config.mode == 1) { + rgblight_timer_disable(); + } else if (rgblight_config.mode >=2 && rgblight_config.mode <=23) { + // MODE 2-5, breathing + // MODE 6-8, rainbow mood + // MODE 9-14, rainbow swirl + // MODE 15-20, snake + // MODE 21-23, knight + rgblight_timer_enable(); + } + rgblight_sethsv(rgblight_config.hue, rgblight_config.sat, rgblight_config.val); +} + +void rgblight_toggle(void) { + rgblight_config.enable ^= 1; + eeconfig_write_rgblight(rgblight_config.raw); + dprintf("rgblight toggle: rgblight_config.enable = %u\n", rgblight_config.enable); + if (rgblight_config.enable) { + rgblight_mode(rgblight_config.mode); + } else { + rgblight_timer_disable(); + _delay_ms(50); + rgblight_set(); + } +} + + +void rgblight_increase_hue(void){ + uint16_t hue; + hue = (rgblight_config.hue+RGBLIGHT_HUE_STEP) % 360; + rgblight_sethsv(hue, rgblight_config.sat, rgblight_config.val); +} +void rgblight_decrease_hue(void){ + uint16_t hue; + if (rgblight_config.hue-RGBLIGHT_HUE_STEP <0 ) { + hue = (rgblight_config.hue+360-RGBLIGHT_HUE_STEP) % 360; + } else { + hue = (rgblight_config.hue-RGBLIGHT_HUE_STEP) % 360; + } + rgblight_sethsv(hue, rgblight_config.sat, rgblight_config.val); +} +void rgblight_increase_sat(void) { + uint8_t sat; + if (rgblight_config.sat + RGBLIGHT_SAT_STEP > 255) { + sat = 255; + } else { + sat = rgblight_config.sat+RGBLIGHT_SAT_STEP; + } + rgblight_sethsv(rgblight_config.hue, sat, rgblight_config.val); +} +void rgblight_decrease_sat(void){ + uint8_t sat; + if (rgblight_config.sat - RGBLIGHT_SAT_STEP < 0) { + sat = 0; + } else { + sat = rgblight_config.sat-RGBLIGHT_SAT_STEP; + } + rgblight_sethsv(rgblight_config.hue, sat, rgblight_config.val); +} +void rgblight_increase_val(void){ + uint8_t val; + if (rgblight_config.val + RGBLIGHT_VAL_STEP > 255) { + val = 255; + } else { + val = rgblight_config.val+RGBLIGHT_VAL_STEP; + } + rgblight_sethsv(rgblight_config.hue, rgblight_config.sat, val); +} +void rgblight_decrease_val(void) { + uint8_t val; + if (rgblight_config.val - RGBLIGHT_VAL_STEP < 0) { + val = 0; + } else { + val = rgblight_config.val-RGBLIGHT_VAL_STEP; + } + rgblight_sethsv(rgblight_config.hue, rgblight_config.sat, val); +} + +void rgblight_sethsv_noeeprom(uint16_t hue, uint8_t sat, uint8_t val){ + inmem_config.raw = rgblight_config.raw; + if (rgblight_config.enable) { + struct cRGB tmp_led; + sethsv(hue, sat, val, &tmp_led); + inmem_config.hue = hue; + inmem_config.sat = sat; + inmem_config.val = val; + // dprintf("rgblight set hue [MEMORY]: %u,%u,%u\n", inmem_config.hue, inmem_config.sat, inmem_config.val); + rgblight_setrgb(tmp_led.r, tmp_led.g, tmp_led.b); + } +} +void rgblight_sethsv(uint16_t hue, uint8_t sat, uint8_t val){ + if (rgblight_config.enable) { + if (rgblight_config.mode == 1) { + // same static color + rgblight_sethsv_noeeprom(hue, sat, val); + } else { + // all LEDs in same color + if (rgblight_config.mode >= 2 && rgblight_config.mode <= 5) { + // breathing mode, ignore the change of val, use in memory value instead + val = rgblight_config.val; + } else if (rgblight_config.mode >= 6 && rgblight_config.mode <= 14) { + // rainbow mood and rainbow swirl, ignore the change of hue + hue = rgblight_config.hue; + } + } + rgblight_config.hue = hue; + rgblight_config.sat = sat; + rgblight_config.val = val; + eeconfig_write_rgblight(rgblight_config.raw); + dprintf("rgblight set hsv [EEPROM]: %u,%u,%u\n", rgblight_config.hue, rgblight_config.sat, rgblight_config.val); + } +} + +void rgblight_setrgb(uint8_t r, uint8_t g, uint8_t b){ + // dprintf("rgblight set rgb: %u,%u,%u\n", r,g,b); + for (uint8_t i=0;i>8)&0xff; + OCR3AL = RGBLED_TIMER_TOP&0xff; + SREG = sreg; +} +void rgblight_timer_enable(void) { + TIMSK3 |= _BV(OCIE3A); + dprintf("TIMER3 enabled.\n"); +} +void rgblight_timer_disable(void) { + TIMSK3 &= ~_BV(OCIE3A); + dprintf("TIMER3 disabled.\n"); +} +void rgblight_timer_toggle(void) { + TIMSK3 ^= _BV(OCIE3A); + dprintf("TIMER3 toggled.\n"); +} + +ISR(TIMER3_COMPA_vect) { + // Mode = 1, static light, do nothing here + if (rgblight_config.mode>=2 && rgblight_config.mode<=5) { + // mode = 2 to 5, breathing mode + rgblight_effect_breathing(rgblight_config.mode-2); + + } else if (rgblight_config.mode>=6 && rgblight_config.mode<=8) { + rgblight_effect_rainbow_mood(rgblight_config.mode-6); + } else if (rgblight_config.mode>=9 && rgblight_config.mode<=14) { + rgblight_effect_rainbow_swirl(rgblight_config.mode-9); + } else if (rgblight_config.mode>=15 && rgblight_config.mode<=20) { + rgblight_effect_snake(rgblight_config.mode-15); + } else if (rgblight_config.mode>=21 && rgblight_config.mode<=23) { + rgblight_effect_knight(rgblight_config.mode-21); + } +} + +// effects +void rgblight_effect_breathing(uint8_t interval) { + static uint8_t pos = 0; + static uint16_t last_timer = 0; + + if (timer_elapsed(last_timer)=RGBLED_NUM) k=RGBLED_NUM-1; + if (i==k) { + sethsv(rgblight_config.hue, rgblight_config.sat, rgblight_config.val, &preled[i]); + } + } + } + if (RGBLIGHT_EFFECT_KNIGHT_OFFSET) { + for (i=0;iRGBLED_NUM+RGBLIGHT_EFFECT_KNIGHT_LENGTH) { + pos = RGBLED_NUM+RGBLIGHT_EFFECT_KNIGHT_LENGTH-1; + increament = 1; + } else { + pos += 1; + } + } + +} diff --git a/keyboard/planck/rgblight.h b/keyboard/planck/rgblight.h new file mode 100644 index 0000000000..fd39ead09f --- /dev/null +++ b/keyboard/planck/rgblight.h @@ -0,0 +1,87 @@ +#ifndef RGBLIGHT_H +#define RGBLIGHT_H + +#ifndef RGBLIGHT_MODES +#define RGBLIGHT_MODES 23 +#endif + +#ifndef RGBLIGHT_EFFECT_SNAKE_LENGTH +#define RGBLIGHT_EFFECT_SNAKE_LENGTH 7 +#endif + +#ifndef RGBLIGHT_EFFECT_KNIGHT_LENGTH +#define RGBLIGHT_EFFECT_KNIGHT_LENGTH 7 +#endif +#ifndef RGBLIGHT_EFFECT_KNIGHT_OFFSET +#define RGBLIGHT_EFFECT_KNIGHT_OFFSET 11 +#endif + +#ifndef RGBLIGHT_EFFECT_DUALKNIGHT_LENGTH +#define RGBLIGHT_EFFECT_DUALKNIGHT_LENGTH 4 +#endif + +#ifndef RGBLIGHT_HUE_STEP +#define RGBLIGHT_HUE_STEP 10 +#endif +#ifndef RGBLIGHT_SAT_STEP +#define RGBLIGHT_SAT_STEP 17 +#endif +#ifndef RGBLIGHT_VAL_STEP +#define RGBLIGHT_VAL_STEP 17 +#endif + +#define RGBLED_TIMER_TOP F_CPU/(256*64) + +#include +#include +#include "eeconfig.h" +#include "light_ws2812.h" + +typedef union { + uint32_t raw; + struct { + bool enable :1; + uint8_t mode :6; + uint16_t hue :9; + uint8_t sat :8; + uint8_t val :8; + }; +} rgblight_config_t; + +void rgblight_init(void); +void rgblight_increase(void); +void rgblight_decrease(void); +void rgblight_toggle(void); +void rgblight_step(void); +void rgblight_mode(uint8_t mode); +void rgblight_set(void); +void rgblight_increase_hue(void); +void rgblight_decrease_hue(void); +void rgblight_increase_sat(void); +void rgblight_decrease_sat(void); +void rgblight_increase_val(void); +void rgblight_decrease_val(void); +void rgblight_sethsv(uint16_t hue, uint8_t sat, uint8_t val); +void rgblight_setrgb(uint8_t r, uint8_t g, uint8_t b); + +#define EECONFIG_RGBLIGHT (uint8_t *)7 +uint32_t eeconfig_read_rgblight(void); +void eeconfig_write_rgblight(uint32_t val); +void eeconfig_write_rgblight_default(void); +void eeconfig_debug_rgblight(void); + +void sethsv(uint16_t hue, uint8_t sat, uint8_t val, struct cRGB *led1); +void setrgb(uint8_t r, uint8_t g, uint8_t b, struct cRGB *led1); +void rgblight_sethsv_noeeprom(uint16_t hue, uint8_t sat, uint8_t val); + +void rgblight_timer_init(void); +void rgblight_timer_enable(void); +void rgblight_timer_disable(void); +void rgblight_timer_toggle(void); +void rgblight_effect_breathing(uint8_t interval); +void rgblight_effect_rainbow_mood(uint8_t interval); +void rgblight_effect_rainbow_swirl(uint8_t interval); +void rgblight_effect_snake(uint8_t interval); +void rgblight_effect_knight(uint8_t interval); + +#endif -- cgit v1.2.3 From ba9ac457b2159097ecfd9848c5171c52e3a68260 Mon Sep 17 00:00:00 2001 From: Yang Liu Date: Sun, 24 Jan 2016 17:05:47 -0800 Subject: Integrate WS2812 code into quantum core --- keyboard/planck/Makefile | 8 +- keyboard/planck/config.h | 6 - keyboard/planck/light_ws2812.c | 181 --------------- keyboard/planck/light_ws2812.h | 73 ------ keyboard/planck/rgblight.c | 505 ----------------------------------------- keyboard/planck/rgblight.h | 87 ------- 6 files changed, 1 insertion(+), 859 deletions(-) delete mode 100755 keyboard/planck/light_ws2812.c delete mode 100755 keyboard/planck/light_ws2812.h delete mode 100644 keyboard/planck/rgblight.c delete mode 100644 keyboard/planck/rgblight.h (limited to 'keyboard') diff --git a/keyboard/planck/Makefile b/keyboard/planck/Makefile index d37005260a..7619399b98 100644 --- a/keyboard/planck/Makefile +++ b/keyboard/planck/Makefile @@ -143,18 +143,12 @@ BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality # AUDIO_ENABLE = YES # Audio output on port C6 # UNICODE_ENABLE = YES # Unicode # BLUETOOTH_ENABLE = yes # Enable Bluetooth with the Adafruit EZ-Key HID -RGBLIGHT_ENABLE = yes # Enable WS2812 bottom RGB light +RGBLIGHT_ENABLE = yes # Enable WS2812 RGB underlight. Do not enable this with MIDI at the same time. ifdef BACKLIGHT_ENABLE SRC += backlight.c endif -ifdef RGBLIGHT_ENABLE - SRC += light_ws2812.c - SRC += rgblight.c - OPT_DEFS += -DRGBLIGHT_ENABLE -endif - # Optimize size but this may cause error "relocation truncated to fit" #EXTRALDFLAGS = -Wl,--relax diff --git a/keyboard/planck/config.h b/keyboard/planck/config.h index 856de73066..d3719e0cb1 100644 --- a/keyboard/planck/config.h +++ b/keyboard/planck/config.h @@ -63,15 +63,9 @@ along with this program. If not, see . #define ws2812_DDRREG DDRD #define ws2812_pin PD1 #define RGBLED_NUM 28 // Number of LEDs -#ifndef RGBLIGHT_HUE_STEP #define RGBLIGHT_HUE_STEP 10 -#endif -#ifndef RGBLIGHT_SAT_STEP #define RGBLIGHT_SAT_STEP 17 -#endif -#ifndef RGBLIGHT_VAL_STEP #define RGBLIGHT_VAL_STEP 17 -#endif /* * Feature disable options diff --git a/keyboard/planck/light_ws2812.c b/keyboard/planck/light_ws2812.c deleted file mode 100755 index f20043067e..0000000000 --- a/keyboard/planck/light_ws2812.c +++ /dev/null @@ -1,181 +0,0 @@ -/* -* light weight WS2812 lib V2.0b -* -* Controls WS2811/WS2812/WS2812B RGB-LEDs -* Author: Tim (cpldcpu@gmail.com) -* -* Jan 18th, 2014 v2.0b Initial Version -* Nov 29th, 2015 v2.3 Added SK6812RGBW support -* -* License: GNU GPL v2 (see License.txt) -*/ - -#include "light_ws2812.h" -#include -#include -#include -#include "debug.h" - -// Setleds for standard RGB -void inline ws2812_setleds(struct cRGB *ledarray, uint16_t leds) -{ - ws2812_setleds_pin(ledarray,leds, _BV(ws2812_pin)); -} - -void inline ws2812_setleds_pin(struct cRGB *ledarray, uint16_t leds, uint8_t pinmask) -{ - ws2812_DDRREG |= pinmask; // Enable DDR - ws2812_sendarray_mask((uint8_t*)ledarray,leds+leds+leds,pinmask); - _delay_us(50); -} - -// Setleds for SK6812RGBW -void inline ws2812_setleds_rgbw(struct cRGBW *ledarray, uint16_t leds) -{ - ws2812_DDRREG |= _BV(ws2812_pin); // Enable DDR - ws2812_sendarray_mask((uint8_t*)ledarray,leds<<2,_BV(ws2812_pin)); - _delay_us(80); -} - -void ws2812_sendarray(uint8_t *data,uint16_t datlen) -{ - ws2812_sendarray_mask(data,datlen,_BV(ws2812_pin)); -} - -/* - This routine writes an array of bytes with RGB values to the Dataout pin - using the fast 800kHz clockless WS2811/2812 protocol. -*/ - -// Timing in ns -#define w_zeropulse 350 -#define w_onepulse 900 -#define w_totalperiod 1250 - -// Fixed cycles used by the inner loop -#define w_fixedlow 2 -#define w_fixedhigh 4 -#define w_fixedtotal 8 - -// Insert NOPs to match the timing, if possible -#define w_zerocycles (((F_CPU/1000)*w_zeropulse )/1000000) -#define w_onecycles (((F_CPU/1000)*w_onepulse +500000)/1000000) -#define w_totalcycles (((F_CPU/1000)*w_totalperiod +500000)/1000000) - -// w1 - nops between rising edge and falling edge - low -#define w1 (w_zerocycles-w_fixedlow) -// w2 nops between fe low and fe high -#define w2 (w_onecycles-w_fixedhigh-w1) -// w3 nops to complete loop -#define w3 (w_totalcycles-w_fixedtotal-w1-w2) - -#if w1>0 - #define w1_nops w1 -#else - #define w1_nops 0 -#endif - -// The only critical timing parameter is the minimum pulse length of the "0" -// Warn or throw error if this timing can not be met with current F_CPU settings. -#define w_lowtime ((w1_nops+w_fixedlow)*1000000)/(F_CPU/1000) -#if w_lowtime>550 - #error "Light_ws2812: Sorry, the clock speed is too low. Did you set F_CPU correctly?" -#elif w_lowtime>450 - #warning "Light_ws2812: The timing is critical and may only work on WS2812B, not on WS2812(S)." - #warning "Please consider a higher clockspeed, if possible" -#endif - -#if w2>0 -#define w2_nops w2 -#else -#define w2_nops 0 -#endif - -#if w3>0 -#define w3_nops w3 -#else -#define w3_nops 0 -#endif - -#define w_nop1 "nop \n\t" -#define w_nop2 "rjmp .+0 \n\t" -#define w_nop4 w_nop2 w_nop2 -#define w_nop8 w_nop4 w_nop4 -#define w_nop16 w_nop8 w_nop8 - -void inline ws2812_sendarray_mask(uint8_t *data,uint16_t datlen,uint8_t maskhi) -{ - uint8_t curbyte,ctr,masklo; - uint8_t sreg_prev; - - masklo =~maskhi&ws2812_PORTREG; - maskhi |= ws2812_PORTREG; - sreg_prev=SREG; - cli(); - - while (datlen--) { - curbyte=*data++; - - asm volatile( - " ldi %0,8 \n\t" - "loop%=: \n\t" - " out %2,%3 \n\t" // '1' [01] '0' [01] - re -#if (w1_nops&1) -w_nop1 -#endif -#if (w1_nops&2) -w_nop2 -#endif -#if (w1_nops&4) -w_nop4 -#endif -#if (w1_nops&8) -w_nop8 -#endif -#if (w1_nops&16) -w_nop16 -#endif - " sbrs %1,7 \n\t" // '1' [03] '0' [02] - " out %2,%4 \n\t" // '1' [--] '0' [03] - fe-low - " lsl %1 \n\t" // '1' [04] '0' [04] -#if (w2_nops&1) - w_nop1 -#endif -#if (w2_nops&2) - w_nop2 -#endif -#if (w2_nops&4) - w_nop4 -#endif -#if (w2_nops&8) - w_nop8 -#endif -#if (w2_nops&16) - w_nop16 -#endif - " out %2,%4 \n\t" // '1' [+1] '0' [+1] - fe-high -#if (w3_nops&1) -w_nop1 -#endif -#if (w3_nops&2) -w_nop2 -#endif -#if (w3_nops&4) -w_nop4 -#endif -#if (w3_nops&8) -w_nop8 -#endif -#if (w3_nops&16) -w_nop16 -#endif - - " dec %0 \n\t" // '1' [+2] '0' [+2] - " brne loop%=\n\t" // '1' [+3] '0' [+4] - : "=&d" (ctr) - : "r" (curbyte), "I" (_SFR_IO_ADDR(ws2812_PORTREG)), "r" (maskhi), "r" (masklo) - ); - } - - SREG=sreg_prev; -} diff --git a/keyboard/planck/light_ws2812.h b/keyboard/planck/light_ws2812.h deleted file mode 100755 index 54eef22d9e..0000000000 --- a/keyboard/planck/light_ws2812.h +++ /dev/null @@ -1,73 +0,0 @@ -/* - * light weight WS2812 lib include - * - * Version 2.3 - Nev 29th 2015 - * Author: Tim (cpldcpu@gmail.com) - * - * Please do not change this file! All configuration is handled in "ws2812_config.h" - * - * License: GNU GPL v2 (see License.txt) - + - */ - -#ifndef LIGHT_WS2812_H_ -#define LIGHT_WS2812_H_ - -#include -#include -//#include "ws2812_config.h" - -/* - * Structure of the LED array - * - * cRGB: RGB for WS2812S/B/C/D, SK6812, SK6812Mini, SK6812WWA, APA104, APA106 - * cRGBW: RGBW for SK6812RGBW - */ - -struct cRGB { uint8_t g; uint8_t r; uint8_t b; }; -struct cRGBW { uint8_t g; uint8_t r; uint8_t b; uint8_t w;}; - - - -/* User Interface - * - * Input: - * ledarray: An array of GRB data describing the LED colors - * number_of_leds: The number of LEDs to write - * pinmask (optional): Bitmask describing the output bin. e.g. _BV(PB0) - * - * The functions will perform the following actions: - * - Set the data-out pin as output - * - Send out the LED data - * - Wait 50�s to reset the LEDs - */ - -void ws2812_setleds (struct cRGB *ledarray, uint16_t number_of_leds); -void ws2812_setleds_pin (struct cRGB *ledarray, uint16_t number_of_leds,uint8_t pinmask); -void ws2812_setleds_rgbw(struct cRGBW *ledarray, uint16_t number_of_leds); - -/* - * Old interface / Internal functions - * - * The functions take a byte-array and send to the data output as WS2812 bitstream. - * The length is the number of bytes to send - three per LED. - */ - -void ws2812_sendarray (uint8_t *array,uint16_t length); -void ws2812_sendarray_mask(uint8_t *array,uint16_t length, uint8_t pinmask); - - -/* - * Internal defines - */ -#ifndef CONCAT -#define CONCAT(a, b) a ## b -#endif -#ifndef CONCAT_EXP -#define CONCAT_EXP(a, b) CONCAT(a, b) -#endif - -// #define ws2812_PORTREG CONCAT_EXP(PORT,ws2812_port) -// #define ws2812_DDRREG CONCAT_EXP(DDR,ws2812_port) - -#endif /* LIGHT_WS2812_H_ */ diff --git a/keyboard/planck/rgblight.c b/keyboard/planck/rgblight.c deleted file mode 100644 index 552456aae3..0000000000 --- a/keyboard/planck/rgblight.c +++ /dev/null @@ -1,505 +0,0 @@ -#include -#include -#include -#include "progmem.h" -#include "timer.h" -#include "rgblight.h" -#include "debug.h" - -const uint8_t DIM_CURVE[] PROGMEM = { - 0, 1, 1, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, - 3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4, 4, - 4, 4, 4, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 6, 6, 6, - 6, 6, 6, 6, 6, 7, 7, 7, 7, 7, 7, 7, 8, 8, 8, 8, - 8, 8, 9, 9, 9, 9, 9, 9, 10, 10, 10, 10, 10, 11, 11, 11, - 11, 11, 12, 12, 12, 12, 12, 13, 13, 13, 13, 14, 14, 14, 14, 15, - 15, 15, 16, 16, 16, 16, 17, 17, 17, 18, 18, 18, 19, 19, 19, 20, - 20, 20, 21, 21, 22, 22, 22, 23, 23, 24, 24, 25, 25, 25, 26, 26, - 27, 27, 28, 28, 29, 29, 30, 30, 31, 32, 32, 33, 33, 34, 35, 35, - 36, 36, 37, 38, 38, 39, 40, 40, 41, 42, 43, 43, 44, 45, 46, 47, - 48, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, - 63, 64, 65, 66, 68, 69, 70, 71, 73, 74, 75, 76, 78, 79, 81, 82, - 83, 85, 86, 88, 90, 91, 93, 94, 96, 98, 99, 101, 103, 105, 107, 109, - 110, 112, 114, 116, 118, 121, 123, 125, 127, 129, 132, 134, 136, 139, 141, 144, - 146, 149, 151, 154, 157, 159, 162, 165, 168, 171, 174, 177, 180, 183, 186, 190, - 193, 196, 200, 203, 207, 211, 214, 218, 222, 226, 230, 234, 238, 242, 248, 255, -}; -const uint8_t RGBLED_BREATHING_TABLE[] PROGMEM = {0,0,0,0,1,1,1,2,2,3,4,5,5,6,7,9,10,11,12,14,15,17,18,20,21,23,25,27,29,31,33,35,37,40,42,44,47,49,52,54,57,59,62,65,67,70,73,76,79,82,85,88,90,93,97,100,103,106,109,112,115,118,121,124,127,131,134,137,140,143,146,149,152,155,158,162,165,167,170,173,176,179,182,185,188,190,193,196,198,201,203,206,208,211,213,215,218,220,222,224,226,228,230,232,234,235,237,238,240,241,243,244,245,246,248,249,250,250,251,252,253,253,254,254,254,255,255,255,255,255,255,255,254,254,254,253,253,252,251,250,250,249,248,246,245,244,243,241,240,238,237,235,234,232,230,228,226,224,222,220,218,215,213,211,208,206,203,201,198,196,193,190,188,185,182,179,176,173,170,167,165,162,158,155,152,149,146,143,140,137,134,131,128,124,121,118,115,112,109,106,103,100,97,93,90,88,85,82,79,76,73,70,67,65,62,59,57,54,52,49,47,44,42,40,37,35,33,31,29,27,25,23,21,20,18,17,15,14,12,11,10,9,7,6,5,5,4,3,2,2,1,1,1,0,0,0}; -const uint8_t RGBLED_BREATHING_INTERVALS[] PROGMEM = {30, 20, 10, 5}; -const uint8_t RGBLED_RAINBOW_MOOD_INTERVALS[] PROGMEM = {120, 60, 30}; -const uint8_t RGBLED_RAINBOW_SWIRL_INTERVALS[] PROGMEM = {100, 50, 20}; -const uint8_t RGBLED_SNAKE_INTERVALS[] PROGMEM = {100, 50, 20}; -const uint8_t RGBLED_KNIGHT_INTERVALS[] PROGMEM = {100, 50, 20}; - -rgblight_config_t rgblight_config; -rgblight_config_t inmem_config; -struct cRGB led[RGBLED_NUM]; -uint8_t rgblight_inited = 0; - - -void sethsv(uint16_t hue, uint8_t sat, uint8_t val, struct cRGB *led1) { - /* convert hue, saturation and brightness ( HSB/HSV ) to RGB - The DIM_CURVE is used only on brightness/value and on saturation (inverted). - This looks the most natural. - */ - uint8_t r, g, b; - - val = pgm_read_byte(&DIM_CURVE[val]); - sat = 255 - pgm_read_byte(&DIM_CURVE[255 - sat]); - - uint8_t base; - - if (sat == 0) { // Acromatic color (gray). Hue doesn't mind. - r = val; - g = val; - b = val; - } else { - base = ((255 - sat) * val) >> 8; - - switch (hue / 60) { - case 0: - r = val; - g = (((val - base)*hue) / 60) + base; - b = base; - break; - - case 1: - r = (((val - base)*(60 - (hue % 60))) / 60) + base; - g = val; - b = base; - break; - - case 2: - r = base; - g = val; - b = (((val - base)*(hue % 60)) / 60) + base; - break; - - case 3: - r = base; - g = (((val - base)*(60 - (hue % 60))) / 60) + base; - b = val; - break; - - case 4: - r = (((val - base)*(hue % 60)) / 60) + base; - g = base; - b = val; - break; - - case 5: - r = val; - g = base; - b = (((val - base)*(60 - (hue % 60))) / 60) + base; - break; - } - } - setrgb(r,g,b, led1); -} - -void setrgb(uint8_t r, uint8_t g, uint8_t b, struct cRGB *led1) { - (*led1).r = r; - (*led1).g = g; - (*led1).b = b; -} - - -uint32_t eeconfig_read_rgblight(void) { - return eeprom_read_dword(EECONFIG_RGBLIGHT); -} -void eeconfig_write_rgblight(uint32_t val) { - eeprom_write_dword(EECONFIG_RGBLIGHT, val); -} -void eeconfig_write_rgblight_default(void) { - dprintf("eeconfig_write_rgblight_default\n"); - rgblight_config.enable = 1; - rgblight_config.mode = 1; - rgblight_config.hue = 200; - rgblight_config.sat = 204; - rgblight_config.val = 204; - eeconfig_write_rgblight(rgblight_config.raw); -} -void eeconfig_debug_rgblight(void) { - dprintf("rgblight_config eprom\n"); - dprintf("rgblight_config.enable = %d\n", rgblight_config.enable); - dprintf("rghlight_config.mode = %d\n", rgblight_config.mode); - dprintf("rgblight_config.hue = %d\n", rgblight_config.hue); - dprintf("rgblight_config.sat = %d\n", rgblight_config.sat); - dprintf("rgblight_config.val = %d\n", rgblight_config.val); -} - -void rgblight_init(void) { - debug_enable = 1; // Debug ON! - dprintf("rgblight_init called.\n"); - rgblight_inited = 1; - dprintf("rgblight_init start!\n"); - if (!eeconfig_is_enabled()) { - dprintf("rgblight_init eeconfig is not enabled.\n"); - eeconfig_init(); - eeconfig_write_rgblight_default(); - } - rgblight_config.raw = eeconfig_read_rgblight(); - if (!rgblight_config.mode) { - dprintf("rgblight_init rgblight_config.mode = 0. Write default values to EEPROM.\n"); - eeconfig_write_rgblight_default(); - rgblight_config.raw = eeconfig_read_rgblight(); - } - eeconfig_debug_rgblight(); // display current eeprom values - - rgblight_timer_init(); // setup the timer - - if (rgblight_config.enable) { - rgblight_mode(rgblight_config.mode); - } -} - -void rgblight_increase(void) { - uint8_t mode; - if (rgblight_config.mode < RGBLIGHT_MODES) { - mode = rgblight_config.mode + 1; - } - rgblight_mode(mode); -} - -void rgblight_decrease(void) { - uint8_t mode; - if (rgblight_config.mode > 1) { //mode will never < 1, if mode is less than 1, eeprom need to be initialized. - mode = rgblight_config.mode-1; - } - rgblight_mode(mode); -} - -void rgblight_step(void) { - uint8_t mode; - mode = rgblight_config.mode + 1; - if (mode > RGBLIGHT_MODES) { - mode = 1; - } - rgblight_mode(mode); -} - -void rgblight_mode(uint8_t mode) { - if (!rgblight_config.enable) { - return; - } - if (mode<1) { - rgblight_config.mode = 1; - } else if (mode > RGBLIGHT_MODES) { - rgblight_config.mode = RGBLIGHT_MODES; - } else { - rgblight_config.mode = mode; - } - eeconfig_write_rgblight(rgblight_config.raw); - dprintf("rgblight mode: %u\n", rgblight_config.mode); - if (rgblight_config.mode == 1) { - rgblight_timer_disable(); - } else if (rgblight_config.mode >=2 && rgblight_config.mode <=23) { - // MODE 2-5, breathing - // MODE 6-8, rainbow mood - // MODE 9-14, rainbow swirl - // MODE 15-20, snake - // MODE 21-23, knight - rgblight_timer_enable(); - } - rgblight_sethsv(rgblight_config.hue, rgblight_config.sat, rgblight_config.val); -} - -void rgblight_toggle(void) { - rgblight_config.enable ^= 1; - eeconfig_write_rgblight(rgblight_config.raw); - dprintf("rgblight toggle: rgblight_config.enable = %u\n", rgblight_config.enable); - if (rgblight_config.enable) { - rgblight_mode(rgblight_config.mode); - } else { - rgblight_timer_disable(); - _delay_ms(50); - rgblight_set(); - } -} - - -void rgblight_increase_hue(void){ - uint16_t hue; - hue = (rgblight_config.hue+RGBLIGHT_HUE_STEP) % 360; - rgblight_sethsv(hue, rgblight_config.sat, rgblight_config.val); -} -void rgblight_decrease_hue(void){ - uint16_t hue; - if (rgblight_config.hue-RGBLIGHT_HUE_STEP <0 ) { - hue = (rgblight_config.hue+360-RGBLIGHT_HUE_STEP) % 360; - } else { - hue = (rgblight_config.hue-RGBLIGHT_HUE_STEP) % 360; - } - rgblight_sethsv(hue, rgblight_config.sat, rgblight_config.val); -} -void rgblight_increase_sat(void) { - uint8_t sat; - if (rgblight_config.sat + RGBLIGHT_SAT_STEP > 255) { - sat = 255; - } else { - sat = rgblight_config.sat+RGBLIGHT_SAT_STEP; - } - rgblight_sethsv(rgblight_config.hue, sat, rgblight_config.val); -} -void rgblight_decrease_sat(void){ - uint8_t sat; - if (rgblight_config.sat - RGBLIGHT_SAT_STEP < 0) { - sat = 0; - } else { - sat = rgblight_config.sat-RGBLIGHT_SAT_STEP; - } - rgblight_sethsv(rgblight_config.hue, sat, rgblight_config.val); -} -void rgblight_increase_val(void){ - uint8_t val; - if (rgblight_config.val + RGBLIGHT_VAL_STEP > 255) { - val = 255; - } else { - val = rgblight_config.val+RGBLIGHT_VAL_STEP; - } - rgblight_sethsv(rgblight_config.hue, rgblight_config.sat, val); -} -void rgblight_decrease_val(void) { - uint8_t val; - if (rgblight_config.val - RGBLIGHT_VAL_STEP < 0) { - val = 0; - } else { - val = rgblight_config.val-RGBLIGHT_VAL_STEP; - } - rgblight_sethsv(rgblight_config.hue, rgblight_config.sat, val); -} - -void rgblight_sethsv_noeeprom(uint16_t hue, uint8_t sat, uint8_t val){ - inmem_config.raw = rgblight_config.raw; - if (rgblight_config.enable) { - struct cRGB tmp_led; - sethsv(hue, sat, val, &tmp_led); - inmem_config.hue = hue; - inmem_config.sat = sat; - inmem_config.val = val; - // dprintf("rgblight set hue [MEMORY]: %u,%u,%u\n", inmem_config.hue, inmem_config.sat, inmem_config.val); - rgblight_setrgb(tmp_led.r, tmp_led.g, tmp_led.b); - } -} -void rgblight_sethsv(uint16_t hue, uint8_t sat, uint8_t val){ - if (rgblight_config.enable) { - if (rgblight_config.mode == 1) { - // same static color - rgblight_sethsv_noeeprom(hue, sat, val); - } else { - // all LEDs in same color - if (rgblight_config.mode >= 2 && rgblight_config.mode <= 5) { - // breathing mode, ignore the change of val, use in memory value instead - val = rgblight_config.val; - } else if (rgblight_config.mode >= 6 && rgblight_config.mode <= 14) { - // rainbow mood and rainbow swirl, ignore the change of hue - hue = rgblight_config.hue; - } - } - rgblight_config.hue = hue; - rgblight_config.sat = sat; - rgblight_config.val = val; - eeconfig_write_rgblight(rgblight_config.raw); - dprintf("rgblight set hsv [EEPROM]: %u,%u,%u\n", rgblight_config.hue, rgblight_config.sat, rgblight_config.val); - } -} - -void rgblight_setrgb(uint8_t r, uint8_t g, uint8_t b){ - // dprintf("rgblight set rgb: %u,%u,%u\n", r,g,b); - for (uint8_t i=0;i>8)&0xff; - OCR3AL = RGBLED_TIMER_TOP&0xff; - SREG = sreg; -} -void rgblight_timer_enable(void) { - TIMSK3 |= _BV(OCIE3A); - dprintf("TIMER3 enabled.\n"); -} -void rgblight_timer_disable(void) { - TIMSK3 &= ~_BV(OCIE3A); - dprintf("TIMER3 disabled.\n"); -} -void rgblight_timer_toggle(void) { - TIMSK3 ^= _BV(OCIE3A); - dprintf("TIMER3 toggled.\n"); -} - -ISR(TIMER3_COMPA_vect) { - // Mode = 1, static light, do nothing here - if (rgblight_config.mode>=2 && rgblight_config.mode<=5) { - // mode = 2 to 5, breathing mode - rgblight_effect_breathing(rgblight_config.mode-2); - - } else if (rgblight_config.mode>=6 && rgblight_config.mode<=8) { - rgblight_effect_rainbow_mood(rgblight_config.mode-6); - } else if (rgblight_config.mode>=9 && rgblight_config.mode<=14) { - rgblight_effect_rainbow_swirl(rgblight_config.mode-9); - } else if (rgblight_config.mode>=15 && rgblight_config.mode<=20) { - rgblight_effect_snake(rgblight_config.mode-15); - } else if (rgblight_config.mode>=21 && rgblight_config.mode<=23) { - rgblight_effect_knight(rgblight_config.mode-21); - } -} - -// effects -void rgblight_effect_breathing(uint8_t interval) { - static uint8_t pos = 0; - static uint16_t last_timer = 0; - - if (timer_elapsed(last_timer)=RGBLED_NUM) k=RGBLED_NUM-1; - if (i==k) { - sethsv(rgblight_config.hue, rgblight_config.sat, rgblight_config.val, &preled[i]); - } - } - } - if (RGBLIGHT_EFFECT_KNIGHT_OFFSET) { - for (i=0;iRGBLED_NUM+RGBLIGHT_EFFECT_KNIGHT_LENGTH) { - pos = RGBLED_NUM+RGBLIGHT_EFFECT_KNIGHT_LENGTH-1; - increament = 1; - } else { - pos += 1; - } - } - -} diff --git a/keyboard/planck/rgblight.h b/keyboard/planck/rgblight.h deleted file mode 100644 index fd39ead09f..0000000000 --- a/keyboard/planck/rgblight.h +++ /dev/null @@ -1,87 +0,0 @@ -#ifndef RGBLIGHT_H -#define RGBLIGHT_H - -#ifndef RGBLIGHT_MODES -#define RGBLIGHT_MODES 23 -#endif - -#ifndef RGBLIGHT_EFFECT_SNAKE_LENGTH -#define RGBLIGHT_EFFECT_SNAKE_LENGTH 7 -#endif - -#ifndef RGBLIGHT_EFFECT_KNIGHT_LENGTH -#define RGBLIGHT_EFFECT_KNIGHT_LENGTH 7 -#endif -#ifndef RGBLIGHT_EFFECT_KNIGHT_OFFSET -#define RGBLIGHT_EFFECT_KNIGHT_OFFSET 11 -#endif - -#ifndef RGBLIGHT_EFFECT_DUALKNIGHT_LENGTH -#define RGBLIGHT_EFFECT_DUALKNIGHT_LENGTH 4 -#endif - -#ifndef RGBLIGHT_HUE_STEP -#define RGBLIGHT_HUE_STEP 10 -#endif -#ifndef RGBLIGHT_SAT_STEP -#define RGBLIGHT_SAT_STEP 17 -#endif -#ifndef RGBLIGHT_VAL_STEP -#define RGBLIGHT_VAL_STEP 17 -#endif - -#define RGBLED_TIMER_TOP F_CPU/(256*64) - -#include -#include -#include "eeconfig.h" -#include "light_ws2812.h" - -typedef union { - uint32_t raw; - struct { - bool enable :1; - uint8_t mode :6; - uint16_t hue :9; - uint8_t sat :8; - uint8_t val :8; - }; -} rgblight_config_t; - -void rgblight_init(void); -void rgblight_increase(void); -void rgblight_decrease(void); -void rgblight_toggle(void); -void rgblight_step(void); -void rgblight_mode(uint8_t mode); -void rgblight_set(void); -void rgblight_increase_hue(void); -void rgblight_decrease_hue(void); -void rgblight_increase_sat(void); -void rgblight_decrease_sat(void); -void rgblight_increase_val(void); -void rgblight_decrease_val(void); -void rgblight_sethsv(uint16_t hue, uint8_t sat, uint8_t val); -void rgblight_setrgb(uint8_t r, uint8_t g, uint8_t b); - -#define EECONFIG_RGBLIGHT (uint8_t *)7 -uint32_t eeconfig_read_rgblight(void); -void eeconfig_write_rgblight(uint32_t val); -void eeconfig_write_rgblight_default(void); -void eeconfig_debug_rgblight(void); - -void sethsv(uint16_t hue, uint8_t sat, uint8_t val, struct cRGB *led1); -void setrgb(uint8_t r, uint8_t g, uint8_t b, struct cRGB *led1); -void rgblight_sethsv_noeeprom(uint16_t hue, uint8_t sat, uint8_t val); - -void rgblight_timer_init(void); -void rgblight_timer_enable(void); -void rgblight_timer_disable(void); -void rgblight_timer_toggle(void); -void rgblight_effect_breathing(uint8_t interval); -void rgblight_effect_rainbow_mood(uint8_t interval); -void rgblight_effect_rainbow_swirl(uint8_t interval); -void rgblight_effect_snake(uint8_t interval); -void rgblight_effect_knight(uint8_t interval); - -#endif -- cgit v1.2.3 From 84657a9e4be2dfa54338b659d8f0a49c2f50e3f4 Mon Sep 17 00:00:00 2001 From: Yang Liu Date: Sun, 24 Jan 2016 17:54:35 -0800 Subject: Add a photo for the demonstration of RGB underflow --- .../planck/keymaps/yang/planck-with-rgb-underglow.jpg | Bin 0 -> 343033 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 keyboard/planck/keymaps/yang/planck-with-rgb-underglow.jpg (limited to 'keyboard') diff --git a/keyboard/planck/keymaps/yang/planck-with-rgb-underglow.jpg b/keyboard/planck/keymaps/yang/planck-with-rgb-underglow.jpg new file mode 100644 index 0000000000..c636b9a83d Binary files /dev/null and b/keyboard/planck/keymaps/yang/planck-with-rgb-underglow.jpg differ -- cgit v1.2.3 From 2d29795de81b6655735ee5b74a57deaaa4c63f1d Mon Sep 17 00:00:00 2001 From: Yang Liu Date: Sun, 24 Jan 2016 17:56:43 -0800 Subject: add one more photo --- keyboard/planck/keymaps/yang/WS2812-wiring.jpg | Bin 0 -> 290495 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 keyboard/planck/keymaps/yang/WS2812-wiring.jpg (limited to 'keyboard') diff --git a/keyboard/planck/keymaps/yang/WS2812-wiring.jpg b/keyboard/planck/keymaps/yang/WS2812-wiring.jpg new file mode 100644 index 0000000000..2c65cd283a Binary files /dev/null and b/keyboard/planck/keymaps/yang/WS2812-wiring.jpg differ -- cgit v1.2.3 From f277079dfa831d44456f00f307e26cf79d36c03d Mon Sep 17 00:00:00 2001 From: Yang Liu Date: Sun, 24 Jan 2016 18:16:40 -0800 Subject: no message --- keyboard/planck/Makefile | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'keyboard') diff --git a/keyboard/planck/Makefile b/keyboard/planck/Makefile index 7619399b98..307b0c7f4f 100644 --- a/keyboard/planck/Makefile +++ b/keyboard/planck/Makefile @@ -137,13 +137,13 @@ 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 = yes # Breathing sleep LED during USB suspend -NKRO_ENABLE = yes # USB Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work +# NKRO_ENABLE = yes # USB Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality # MIDI_ENABLE = YES # MIDI controls # AUDIO_ENABLE = YES # Audio output on port C6 # UNICODE_ENABLE = YES # Unicode # BLUETOOTH_ENABLE = yes # Enable Bluetooth with the Adafruit EZ-Key HID -RGBLIGHT_ENABLE = yes # Enable WS2812 RGB underlight. Do not enable this with MIDI at the same time. +# RGBLIGHT_ENABLE = yes # Enable WS2812 RGB underlight. Do not enable this with MIDI at the same time. ifdef BACKLIGHT_ENABLE SRC += backlight.c -- cgit v1.2.3 From baddbc6b23b34b5873e7a355c55f1e04485881f6 Mon Sep 17 00:00:00 2001 From: tonyabra Date: Sun, 24 Jan 2016 23:33:26 -0600 Subject: Simplified osx layout for ergodox ez --- keyboard/ergodox_ez/keymaps/tonyabra_osx/keymap.c | 184 +++ keyboard/ergodox_ez/keymaps/tonyabra_osx/readme.md | 5 + .../keymaps/tonyabra_osx/tonyabra_osx.hex | 1471 ++++++++++++++++++++ 3 files changed, 1660 insertions(+) create mode 100644 keyboard/ergodox_ez/keymaps/tonyabra_osx/keymap.c create mode 100644 keyboard/ergodox_ez/keymaps/tonyabra_osx/readme.md create mode 100644 keyboard/ergodox_ez/keymaps/tonyabra_osx/tonyabra_osx.hex (limited to 'keyboard') diff --git a/keyboard/ergodox_ez/keymaps/tonyabra_osx/keymap.c b/keyboard/ergodox_ez/keymaps/tonyabra_osx/keymap.c new file mode 100644 index 0000000000..fb7c00983e --- /dev/null +++ b/keyboard/ergodox_ez/keymaps/tonyabra_osx/keymap.c @@ -0,0 +1,184 @@ +#include "ergodox_ez.h" +#include "debug.h" +#include "action_layer.h" + +#define BASE 0 // default layer +#define SYMB 1 // symbols +#define MDIA 2 // media keys + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { +/* Keymap 0: Basic layer + * + * ,--------------------------------------------------. ,--------------------------------------------------. + * | Esc | 1 | 2 | 3 | 4 | 5 | = | | - | 6 | 7 | 8 | 9 | 0 | Enter | + * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| + * | Tab | Q | W | E | R | T | L1 | | L1 | Y | U | I | O | P | \ | + * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + * | BkSp | A | S | D | F | G |------| |------| H | J | K | L | ; | '" | + * |--------+------+------+------+------+------| LGui | | LGui |------+------+------+------+------+--------| + * | LShift | Z | X | C | V | B | | | | N | M | , | . | / | RShift | + * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' + * | L1 | ` | { | } | '" | | Left | Up | Down | Right| L2 | + * `----------------------------------' `----------------------------------' + * ,-------------. ,-------------. + * | Del | Alt | | Alt | Ctrl | + * ,------|------|------| |------+--------+------. + * | | | Home | | PgUp | | | + * | Space|Backsp|------| |------| Tab |Enter | + * | |ace | End | | PgDn | | | + * `--------------------' `----------------------' + */ +// If it accepts an argument (i.e, is a function), it doesn't need KC_. +// Otherwise, it needs KC_* +[BASE] = KEYMAP( // layer 0 : default + // left hand + KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_EQL, + KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, TG(SYMB), + KC_BSPC, KC_A, KC_S, KC_D, KC_F, KC_G, + KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_LGUI, + TG(SYMB), KC_GRV, KC_LBRC, KC_RBRC,KC_QUOT, + KC_DELT,KC_LALT, + KC_HOME, + KC_SPC,KC_BSPC,KC_END, + // right hand + KC_MINS, KC_6, KC_7, KC_8, KC_9, KC_0, KC_ENT, + TG(SYMB), KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSLS, + KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, + KC_LGUI, KC_N, KC_M, KC_COMM,KC_DOT, KC_SLSH, KC_RSFT, + KC_LEFT,KC_UP, KC_DOWN,KC_RIGHT, TG(MDIA), + KC_RALT, KC_RCTL, + KC_PGUP, + KC_PGDN,KC_TAB, KC_ENT + ), +/* Keymap 1: Symbol Layer + * + * ,--------------------------------------------------. ,--------------------------------------------------. + * | | F1 | F2 | F3 | F4 | F5 | | | | F6 | F7 | F8 | F9 | F10 | F11 | + * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| + * | | ! | @ | { | } | | | | | | Up | 7 | 8 | 9 | * | F12 | + * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + * | | # | $ | ( | ) | ` |------| |------| Down | 4 | 5 | 6 | + | | + * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + * | | % | ^ | [ | ] | ~ | | | | & | 1 | 2 | 3 | \ | | + * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' + * | | | | | | | | . | 0 | = | | + * `----------------------------------' `----------------------------------' + * ,-------------. ,-------------. + * | | | | | | + * ,------|------|------| |------+------+------. + * | | | | | | | | + * | | |------| |------| | | + * | | | | | | | | + * `--------------------' `--------------------' + */ +// SYMBOLS +[SYMB] = KEYMAP( + // left hand + KC_TRNS,KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_TRNS, + KC_TRNS,KC_EXLM,KC_AT, KC_LCBR,KC_RCBR,KC_PIPE,KC_TRNS, + KC_TRNS,KC_HASH,KC_DLR, KC_LPRN,KC_RPRN,KC_GRV, + KC_TRNS,KC_PERC,KC_CIRC,KC_LBRC,KC_RBRC,KC_TILD,KC_TRNS, + KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS, + KC_TRNS,KC_TRNS, + KC_TRNS, + KC_TRNS,KC_TRNS,KC_TRNS, + // right hand + KC_TRNS, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, + KC_TRNS, KC_UP, KC_7, KC_8, KC_9, KC_ASTR, KC_F12, + KC_DOWN, KC_4, KC_5, KC_6, KC_PLUS, KC_TRNS, + KC_TRNS, KC_AMPR, KC_1, KC_2, KC_3, KC_BSLS, KC_TRNS, + KC_TRNS,KC_DOT, KC_0, KC_EQL, KC_TRNS, + KC_TRNS, KC_TRNS, + KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS +), +/* Keymap 2: Media and mouse keys + * + * ,--------------------------------------------------. ,--------------------------------------------------. + * | | | | | | | | | | | | | | | | + * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| + * | | | | MsUp | | | | | | | | | | | | + * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + * | | |MsLeft|MsDown|MsRght| |------| |------| | | | | | Play | + * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + * | | | | | | | | | | | | Prev | Next | | | + * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' + * | | | | Lclk | Rclk | |VolUp |VolDn | Mute | | | + * `----------------------------------' `----------------------------------' + * ,-------------. ,-------------. + * | | | | | | + * ,------|------|------| |------+------+------. + * | | | | | | |Brwser| + * | | |------| |------| |Back | + * | | | | | | | | + * `--------------------' `--------------------' + */ +// MEDIA AND MOUSE +[MDIA] = KEYMAP( + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_MS_U, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_MS_L, KC_MS_D, KC_MS_R, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_BTN1, KC_BTN2, + KC_TRNS, KC_TRNS, + KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, + // right hand + 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_MPLY, + KC_TRNS, KC_TRNS, KC_TRNS, KC_MPRV, KC_MNXT, KC_TRNS, KC_TRNS, + KC_VOLU, KC_VOLD, KC_MUTE, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, + KC_TRNS, + KC_TRNS, KC_TRNS, KC_WBAK +), +}; + +const uint16_t PROGMEM fn_actions[] = { + [1] = ACTION_LAYER_TAP_TOGGLE(SYMB) // FN1 - Momentary Layer 1 (Symbols) +}; + +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; +}; + +// 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/keyboard/ergodox_ez/keymaps/tonyabra_osx/readme.md b/keyboard/ergodox_ez/keymaps/tonyabra_osx/readme.md new file mode 100644 index 0000000000..f9d76efc23 --- /dev/null +++ b/keyboard/ergodox_ez/keymaps/tonyabra_osx/readme.md @@ -0,0 +1,5 @@ +# ErgoDox EZ OS X Simplified Configuration + +This keyboard configuration replaces the hyper and meh keys with the command key. It also removes all of the meta keys that require a "hold" because I found that I hesitate when I type, which can accidentally fire those combinations. On the upper left of the left hand, I mimicked the Mac placement of tab and escape, and on the upper right of the right hand, I placed an additional enter key for convenience when breezing through prompts. + +This is my standard working configuration for now, but I can see myself tweaking it as I use it more. I highly recommend you do the same. \ No newline at end of file diff --git a/keyboard/ergodox_ez/keymaps/tonyabra_osx/tonyabra_osx.hex b/keyboard/ergodox_ez/keymaps/tonyabra_osx/tonyabra_osx.hex new file mode 100644 index 0000000000..c3481dccbe --- /dev/null +++ b/keyboard/ergodox_ez/keymaps/tonyabra_osx/tonyabra_osx.hex @@ -0,0 +1,1471 @@ +:100000000C9400070C9444070C9444070C94440788 +:100010000C9444070C9444070C9444070C94440734 +:100020000C9444070C9444070C9458120C942A1313 +:100030000C9444070C9444070C9444070C94440714 +:100040000C9444070C94002C0C9444070C94440723 +:100050000C9444070C94F8210C9444070C94440726 +:100060000C9444070C9444070C9444070C944407E4 +:100070000C9444070C9444070C9444070C944407D4 +:100080000C9444070C9444070C9444070C944407C4 +:100090000C9444070C9444070C9444070C944407B4 +:1000A0000C9444070C9444070C9444079713B91319 +:1000B000A714B913A714FE132114A71476148914D6 +:1000C000D017D017FF17FF1742188018991A991ADE +:1000D0009918991A9A199A196D1A991A991A841ACB +:1000E0000000F0A129002B002A00E10001540000CB +:1000F0001E00140004001D0035004D001F001A00F2 +:1001000016001B002F002A00200008000700060030 +:1001100030002C00210015000900190034004A00AD +:10012000220017000A00050000004C002E000154B8 +:100130000000E3000000E2002D0001540000E30095 +:100140000000E60023001C000B0011000000E4008A +:10015000240018000D00100050004B0025000C007A +:100160000E00360052002800260012000F00370053 +:1001700051002B0027001300330038004F004E00C1 +:10018000280031003400E5000254000001000100A5 +:1001900001000100010000003A001E0220022202BC +:1001A000010001003B001F022102230201000100A7 +:1001B0003C002F0226022F00010001003D0030020A +:1001C00027023000010001003E00310235003502F7 +:1001D000000001000100010000000100000001001A +:1001E0000100010000000100000001003F0052007A +:1001F00051002402000001004000240021001E00E4 +:10020000010001004100250022001F00370001000D +:1002100042002600230020002700010043002502A1 +:100220002E0231002E0001004400450001000100B3 +:1002300001000000010001000100010001000000B8 +:1002400001000100010001000100010001000100A6 +:10025000F2000100010001000100F000F1000100C6 +:10026000F400010001000100F3000100F5000100AD +:100270000100010001000100000001000100010077 +:100280000000010000000100010001000000010069 +:100290000000010001000100010001000000010058 +:1002A0000100010001000100A9000100010001009E +:1002B0000100AC00AA00B600010001000100AB0083 +:1002C000A80001000100010001000100010001007F +:1002D00001000100AE000100010000000A0025300D +:1002E000313662003A200025303258000A722F63FE +:1002F0002030313233343536373839414243444582 +:10030000460A000A002530325800626F756E636538 +:10031000213A20006C6566742073696465206174FD +:100320007461636865640A006C656674207369644F +:1003300065206E6F7420726573706F6E64696E678E +:100340000A00747279696E6720746F207265736534 +:1003500074206D637032333031380A000A444542EC +:1003600055473A20656E61626C65642E0A005B73C6 +:100370005D004B6579626F617264207374617274A1 +:100380002E0A005B575D005B535D005B525D005BB6 +:10039000445D005B435D0016034500720067006F1B +:1003A0000044006F007800200045005A000000164D +:1003B000034500720067006F0044006F0078002062 +:1003C0000045005A0000000403090409028D0005DD +:1003D0000100A0FA09040000010301010009211134 +:1003E000010001223F000705810308000A090401FA +:1003F000000103010200092111010001224D000743 +:1004000005820308000A0904020001030000000934 +:1004100021110100012236000705830308000A09A3 +:100420000403000203000000092111010001222041 +:1004300000070584032000010705040320000109CB +:100440000404000103000000092111010001223908 +:1004500000070585031000011201100100000008CB +:10046000EDFE071301000102000105010906A101CB +:10047000050719E029E71500250195087501810296 +:100480000508190129059505750191029501750366 +:100490009101050719002977150025019578750147 +:1004A0008102C00631FF0974A1010975150025FFFD +:1004B0009520750881020976150025FF952075089D +:1004C0009102C005010980A101850216010026B72D +:1004D000001A01002AB700751095018100C0050CB3 +:1004E0000901A1018503160100269C021A01002AB8 +:1004F0009C02751095018100C005010902A1010946 +:1005000001A10005091901290515002501950575A9 +:100510000181029501750381010501093009311539 +:1005200081257F95027508810609381581257F95FB +:100530000175088106050C0A38021581257F950191 +:1005400075088106C0C005010906A101050719E06B +:1005500029E71500250195087501810295017508A7 +:10056000810105081901290595057501910295017B +:10057000750391010507190029FF150025FF950650 +:1005800075088100C00A002530325820006B65795B +:10059000626F6172645F7265706F72743A20000AF4 +:1005A0000025303258006B6579626F6172645F7349 +:1005B00065745F6C65643A200064656C5F6B657997 +:1005C0005F6269743A2063616E27742064656C3AD7 +:1005D00020253032580A006164645F6B65795F6280 +:1005E00069743A2063616E2774206164643A20253F +:1005F0003032580A00646F6E652E0A00626F6F67B2 +:100600006D61676963207363616E3A202E2E2E2020 +:1006100000290A002575002F002575005D2800259A +:10062000640020002564002000256400200025646B +:10063000007C0025303258006D6F7573656B6579ED +:10064000205B62746E7C782079207620685D287249 +:1006500065702F61636C293A205B006D6B5F776872 +:1006600065656C5F74696D655F746F5F6D6178203F +:100670003D2025640A006D6B5F776865656C5F6D72 +:1006800061785F7370656564203D2025640A006DA4 +:100690006B5F74696D655F746F5F6D6178203D207D +:1006A00025640A006D6B5F6D61785F7370656564CA +:1006B000203D2025640A006D6B5F696E746572765B +:1006C000616C203D2025640A006D6B5F64656C6180 +:1006D00079203D2025640A006D6B5F776865656C45 +:1006E0005F74696D655F746F5F6D6178203D202573 +:1006F000640A006D6B5F776865656C5F6D61785F3C +:100700007370656564203D2025640A006D6B5F741D +:10071000696D655F746F5F6D6178203D2025640AA7 +:10072000006D6B5F6D61785F7370656564203D205F +:1007300025640A006D6B5F696E74657276616C206A +:100740003D2025640A006D6B5F64656C6179203D16 +:100750002025640A000A00257500363A207768656E +:10076000656C5F74696D655F746F5F6D61783A2069 +:10077000000A00257500353A20776865656C5F6D65 +:1007800061785F73706565643A20000A0025750022 +:10079000343A2074696D655F746F5F6D61783A20DB +:1007A000000A00257500333A206D61785F7370652B +:1007B00065643A20000A00257500323A20696E749B +:1007C000657276616C286D73293A20000A002575E0 +:1007D00000313A2064656C6179282A31306D7329C3 +:1007E0003A20000A092D2056616C756573202D0A88 +:1007F000004D3E004D25643E20003F00736574208F +:1008000064656661756C740A00433E200077686514 +:1008100072652064656C74613A20637572736F72DF +:100820003D25642C20776865656C3D25640A536519 +:100830006520687474703A2F2F656E2E77696B6926 +:1008400070656469612E6F72672F77696B692F4DD0 +:100850006F7573655F6B6579730A000A092D204D0A +:100860006F7573656B6579202D0A4553432F713A77 +:1008700009717569740A313A0964656C6179282ACD +:1008800031306D73290A323A09696E746572766186 +:100890006C286D73290A333A096D61785F7370654E +:1008A00065640A343A0974696D655F746F5F6D61E0 +:1008B000780A353A09776865656C5F6D61785F73B2 +:1008C000706565640A363A09776865656C5F7469B6 +:1008D0006D655F746F5F6D61780A0A703A097072B6 +:1008E000696E742076616C7565730A643A09736584 +:1008F000742064656661756C74730A75703A092BAF +:10090000310A646F776E3A092D310A706775703A53 +:10091000092B31300A7067646F776E3A092D3130D8 +:100920000A0A7370656564203D2064656C746120FB +:100930002A206D61785F7370656564202A202872B3 +:100940006570656174202F2074696D655F746F5FD9 +:100950006D6178290A003F004D3E2000433E200093 +:100960004C25640A000A092D20436F6E736F6C6575 +:10097000202D0A4553432F713A09717569740A6D28 +:100980003A096D6F7573656B65790A000A092D2048 +:100990004D61676963202D0A643A09646562756771 +:1009A0000A783A096465627567206D6174726978C6 +:1009B0000A6B3A096465627567206B6579626F61DD +:1009C00072640A6D3A096465627567206D6F7573AC +:1009D000650A763A0976657273696F6E0A733A0929 +:1009E0007374617475730A633A09636F6E736F6C25 +:1009F00065206D6F64650A302D343A096C61796544 +:100A000072302D34284631302D4634290A50617514 +:100A1000733A09626F6F746C6F616465720A653A4C +:100A200009656570726F6D0A6E3A094E4B524F0A36 +:100A30007A3A09736C656570204C4544207465737F +:100A4000740A000A002575002E6E6B726F3A200042 +:100A50000A002575002E737761705F6261636B73A6 +:100A60006C6173685F6261636B73706163653A2088 +:100A7000000A002575002E737761705F67726176DA +:100A8000655F6573633A20000A002575002E6E6F5E +:100A90005F6775693A20000A002575002E7377613B +:100AA000705F72616C745F726775693A20000A004A +:100AB0002575002E737761705F6C616C745F6C6775 +:100AC00075693A20000A002575002E636170736C09 +:100AD0006F636B5F746F5F636F6E74726F6C3A20DD +:100AE000000A002575002E737761705F636F6E7466 +:100AF000726F6C5F636170736C6F636B3A20000A96 +:100B00000025303258006B65796D61705F636F6EE0 +:100B10006669672E7261773A20000A002575002EFB +:100B20006D6F7573653A20000A002575002E6B65A0 +:100B300079626F6172643A20000A002575002E6D9B +:100B400061747269783A20000A002575002E656E7E +:100B500061626C653A20000A0025303258006465F5 +:100B60006275675F636F6E6669672E7261773A20A0 +:100B7000000A0025750064656661756C745F6C61C0 +:100B80007965723A20003F004E4B524F3A206F6613 +:100B9000660A004E4B524F3A206F6E0A0074696D20 +:100BA00065725F636F756E743A202530346C580A35 +:100BB000006B6579626F6172645F6E6B726F3A2071 +:100BC00025580A006B6579626F6172645F69646CB5 +:100BD000653A2025580A006B6579626F6172645F1F +:100BE00070726F746F636F6C3A2025580A00686FDB +:100BF00073745F6B6579626F6172645F6C65647357 +:100C000028293A2025580A000A092D2053746174B6 +:100C10007573202D0A004743433A20342E392E3372 +:100C2000204156522D4C4942433A20312E382E3124 +:100C3000204156525F415243483A20617672350A4C +:100C4000004F5054494F4E533A204C554641204294 +:100C50004F4F544D41474943204D4F5553454B4508 +:100C6000592045585452414B455920434F4E534FFC +:100C70004C4520434F4D4D414E44204E4B524F204A +:100C80003531320A004255494C443A2066643732C5 +:100C9000613436202832323A35363A3234204A61CD +:100CA0006E2032342032303136290A005649443A17 +:100CB00020307846454544284572676F446F782058 +:100CC000455A29205049443A20307831333037286A +:100CD0004572676F446F7820455A29205645523A2D +:100CE000203078303030310A00444553433A207484 +:100CF0002E6D2E6B2E206B6579626F61726420669B +:100D000069726D7761726520666F72204572676FD8 +:100D1000646F780A000A092D2056657273696F6E38 +:100D2000202D0A000A6D6F7573653A206F66660A9A +:100D3000000A6D6F7573653A206F6E0A000A6B6565 +:100D400079626F6172643A206F66660A000A6B65A9 +:100D500079626F6172643A206F6E0A000A6D617485 +:100D60007269783A206F66660A000A6D617472696A +:100D7000783A206F6E0A000A64656275673A206FE0 +:100D80006E0A000A64656275673A206F66660A003B +:100D90000A0A626F6F746C6F616465722E2E2E206A +:100DA00000433E20006565636F6E6669673A0A001E +:100DB000536C656570204C454420746573740A005B +:100DC0000000000000000000000000010204060A0C +:100DD0000F17202C3A4A5D71879DB3C7DAE9F5FCFD +:100DE000FFFCF5E9DAC7B39D87715D4A3A2C2017FD +:100DF0000F0A0604020100000000000000000000CD +:100E000011241FBECFEFDAE0DEBFCDBF04B603FE74 +:100E100024C08091F9019091FA01A091FB01B09159 +:100E2000FC018730904BA740B04BB9F41092F90108 +:100E30001092FA011092FB011092FC0114BE84B7CB +:100E4000877F84BF88E10FB6F8948093600010928A +:100E500060000FBEE0E0FFE3099511E0A0E0B1E023 +:100E6000ECE9FBE502C005900D92AA33B107D9F772 +:100E700011E0AAE3B1E001C01D92A93FB107E1F77B +:100E80000E94900F0C94CC2D0C940000FF93EF93D4 +:100E9000E0913A01F0913B01309709F00995EF910B +:100EA000FF910895FC018591803011F0EFDFFBCFB9 +:100EB0000895FF27E0E230E247FF0CC0419597FF1D +:100EC00009C0EDE26095709580959095611D711D4A +:100ED000811D911D27FF02C0219530E350E2AA2712 +:100EE000660F771F881F991FAA1FA41710F0A41B55 +:100EF00063955A95A9F7AA3008F0A95FA05DAF9352 +:100F0000F395611571058105910541F7ED3211F4F5 +:100F1000EF93F395F21718F43F93F395FBCF8F916E +:100F2000B5DFFA95E1F70895E991F991859180305F +:100F300021F0853219F0AADFF9CF089520E0E89476 +:100F400055915532C1F3503311F4689455915A3389 +:100F500048F4505390F3220F022E220F220F200D3F +:100F6000250FF4CF0EF4219589919991533619F3F9 +:100F7000533729F1533559F1BC0188279927E89453 +:100F80005C3621F48991999168945591543639F4DD +:100F900046EF7EF077FF0DC08FEF9FEF0AC0553709 +:100FA0004AE039F0583540E121F0523642E009F08C +:100FB0000895FF93EF937DDFEF91FF91B7CFFF93FC +:100FC000EF93FC0181918030B9F360DFFBCFFF9399 +:100FD000EF9368DFF1CFDF93CF93CDB7DEB72596E0 +:100FE000A3DFCF91DF91089561110BC0FC018281D5 +:100FF000882321F085EE0E946D1603C085EE0E94C5 +:10100000351780E090E0089508956091BC017091DB +:10101000BD018091BE019091BF010E94FB205698B6 +:101020005E9825982D9826982E9827982F9881308D +:1010300019F0823021F00895259A2D9A0895269A64 +:101040002E9A089585E098E0892B11F00E940508FA +:1010500080E090E0089556985E9825982D982698FF +:101060002E9827982F988FEF90E090938900809387 +:10107000880090938B0080938A0090938D008093DA +:101080008C00259A2D9A2FEF80E792E02150804026 +:101090009040E1F700C00000269A2E9A2FEF80E7DB +:1010A00092E0215080409040E1F700C00000279A74 +:1010B0002F9A2FEF80E792E0215080409040E1F797 +:1010C00000C0000025982D982FEF80E792E0215076 +:1010D00080409040E1F700C0000026982E982FEF46 +:1010E00080E792E0215080409040E1F700C000008E +:1010F00027982F9856985E9825982D9826982E9880 +:1011000027982F98089589EA8093800089E080933A +:10111000810024982C983F988AB18F748AB96E9870 +:10112000479A8BB1806B8BB9769A0E942B0884E02A +:1011300098E0892B11F00E94040880E090E0089567 +:1011400080E28093000180913C0181110EC00E94D9 +:10115000EF0881E080933C012FEF83ED90E3215075 +:1011600080409040E1F700C0000080E40E94F50854 +:101170008093000181112EC00E941F0980930001FD +:10118000811128C00E941F0980930001811122C093 +:101190008FE30E941F098093000181111BC00E94F0 +:1011A000170980E40E94F50880930001811112C0A4 +:1011B0008CE00E941F098093000181110BC00E94E6 +:1011C0001F0980930001811105C08FE30E941F0950 +:1011D000809300010E9417098091000108951092E8 +:1011E000B9008AE08093B800089594EA9093BC0017 +:1011F0009091BC0097FFFCCF9091B900987F9830F8 +:1012000021F0903111F081E008958093BB0084E8D3 +:101210008093BC008091BC0087FFFCCF8091B90017 +:10122000887F883111F0803471F780E0089584E977 +:101230008093BC008091BC0084FDFCCF0895809316 +:10124000BB0084E88093BC008091BC0087FFFCCF8A +:101250009091B900987F81E0983209F480E0089578 +:1012600084E88093BC008091BC0087FFFCCF809114 +:10127000BB00089580910001811115C080E40E9497 +:10128000F5088093000181110CC082E10E941F09C2 +:1012900080930001811105C08FEF0E941F09809388 +:1012A00000010E94170984B1807F84B985B1807FD5 +:1012B00085B98AB1837F8AB98BB1837F8BB93E9818 +:1012C000469808950E94A008809300010E943A0960 +:1012D00080B38C7080BB81B3836F81BBAEE3B1E020 +:1012E000ECE4F1E08EE08E0F11921D928E13FCCF94 +:1012F00083E898E0892B11F00C94830808959F925D +:10130000AF92BF92CF92DF92EF92FF920F931F9313 +:10131000CF93DF93809100018823E1F080913D011C +:101320008F5F80933D01811115C082E493E00E949C +:1013300052070E94A00880930001882329F088E2C8 +:1013400093E00E94520706C084E193E00E94520796 +:101350000E942B080EE311E0C0E0D0E0BB24B39460 +:1013600082E0A82ECC24C394D12C25E0E22E23E0E9 +:10137000F22EC730D10500F580910001811164C0C3 +:1013800080E40E94F50880930001811112C082E17F +:101390000E941F098093000181110BC0C6010C2E11 +:1013A00001C0880F0A94EAF780950E941F09809374 +:1013B00000010E94170948C0CA30A1F028F4C830C3 +:1013C00059F0C93061F005C0CC3089F070F0CD30F3 +:1013D00089F0209A289810C0219A29980DC0229A45 +:1013E0002A980AC0239A2B9807C0529A01C0539A90 +:1013F0005B9802C03E9A469890EA9A95F1F79FB1A1 +:10140000799902C082E001C080E091709B25982B01 +:101410007C9902C084E001C080E0892B7D9902C0E4 +:1014200038E001C030E0832B7E9902C020E101C08A +:1014300020E0822B9FB19095991F9927991F929533 +:10144000990F907E892B10C080910001811174C08A +:1014500080E40E94F50880930001882309F459C0B4 +:10146000912C0E941709892DF8019081981739F164 +:10147000808380910101882301F18091D70180FF51 +:1014800004C08AE093E00E9452078091D70180FF58 +:101490000CC0809101011F928F93FF92EF920E94E6 +:1014A000EB070F900F900F900F908091D70180FF66 +:1014B00004C083E093E00E945207A09201010E94C1 +:1014C0003A0921960F5F1F4FCE30D10509F051CF59 +:1014D000809101018823B1F081508093010188231C +:1014E00039F08FE99FE00197F1F700C000000AC0D2 +:1014F000ACE4B1E0EEE3F1E0CF01825F91919D9326 +:101500008E13FCCF82E298E0892BC1F00E94220862 +:1015100015C083E10E941F09809300018111A0CFB3 +:1015200081E40E94F50880930001811199CF0E9407 +:101530003009982E909495CF80E096CF81E0DF918E +:10154000CF911F910F91FF90EF90DF90CF90BF90C0 +:10155000AF909F900895E82FF0E0E45BFE4F80810C +:101560000895CF92DF92EF92FF920F931F93CF9344 +:10157000DF938CEE92E00E9452078CE4E82E81E02B +:10158000F82EC0E0D0E097EEC92E92E0D92E0EEDF5 +:1015900012E0DF93CF93DF92CF920E94EB0784EEAD +:1015A00092E00E945207F70181917F0190E00E9432 +:1015B00061219F938F931F930F930E94EB078CEDF4 +:1015C00092E00E94520721968DB79EB708960FB6FB +:1015D000F8949EBF0FBE8DBFCE30D105D1F6DF91FE +:1015E000CF911F910F91FF90EF90DF90CF900895D2 +:1015F0008B3B910578F4883A910540F5853A910541 +:10160000D0F48430910508F0B1C08130910509F41F +:10161000ADC06BC0803E910508F467C0883E91055F +:1016200008F4A4C09C01205F31092031310508F085 +:101630005CC090650895853A910509F459C0863AD1 +:10164000910509F058C082E890E40895883A910520 +:1016500009F454C0893A910509F453C08A3A9105B6 +:1016600009F452C08B3A910509F451C08C3A9105A6 +:1016700009F450C08D3A910509F44FC0803B9105A3 +:1016800009F44EC08E3A910509F44DC08F3A910588 +:1016900009F44CC0813B910509F44BC0823B910594 +:1016A00009F44AC0833B910509F449C0843B910584 +:1016B00009F448C0853B910509F447C0863B910574 +:1016C00009F446C0873B910509F445C0883B910564 +:1016D00009F444C0893B910509F443C08A3B910554 +:1016E00009F442C080E094E4089580E090E0089519 +:1016F00081E890E4089583E890E4089582EE94E40C +:10170000089589EE94E408958AEE94E4089585EBB3 +:1017100094E4089586EB94E4089587EB94E40895A7 +:101720008CEC94E408958DEC94E4089583E895E4BA +:1017300008958AE895E4089582E995E4089584E996 +:1017400095E4089581E296E4089583E296E408958D +:1017500084E296E4089585E296E4089586E296E4AC +:10176000089587E296E408958AE296E4089508953C +:1017700096E0799FF001112494E5899FE00DF11D19 +:101780001124E60FF11DEE0FFF1FEC51FF4F859165 +:1017900094910895880F991FFC01E05AF0408591BB +:1017A00094910895880F991FFC01E052FF4F859195 +:1017B0009491089526E0729FF001112444E5849FDE +:1017C000E00DF11D1124E60FF11DEE0FFF1FEC518E +:1017D000FF4F859194919C013A9521154FE1340773 +:1017E00008F41EC13F512115304120F49F700E9422 +:1017F000D20B08959C0130532115304118F49927DC +:10180000906C0895811520E5920769F40E94BB1A37 +:101810004FEF84E39CE0415080409040E1F700C0EE +:1018200000000C941D22813020E5920751F48CE5D4 +:1018300093E00E9452078091D70181608093D70185 +:1018400008959C0130552115304108F051C0292FD1 +:1018500033272F70332721303105D9F4AC01437081 +:10186000552702C0220F331F4A95E2F73C68AC01AE +:1018700064E0440F551F6A95E1F744275370242B09 +:10188000352B73E0880F991F7A95E1F780769927B9 +:101890001DC02230310529F4982F8827816F906A66 +:1018A000089523303105A9F4AC014370552721E098 +:1018B00030E002C0220F331F4A95E2F73C6843E054 +:1018C000880F991F4A95E1F7807E9770822B932BA2 +:1018D000089524303105E1F4AC014370552721E02F +:1018E00030E002C0220F331F4A95E2F73A68E7CF93 +:1018F0009C0130572115304118F49F709062089573 +:101900009C0130582115304118F49F70906A089559 +:10191000803E9105E0F4803C910558F581339105B6 +:1019200009F46FC048F48932910509F463C08A3222 +:10193000910509F46DC072C089339105E9F08238D0 +:101940009105D1F08533910509F44DC067C0833E00 +:10195000910581F138F4803E9105B9F0823E910500 +:10196000D9F05CC0863E910561F1873E9105A1F1F9 +:1019700055C00E94CA0B08952091EA0120FD02C0C3 +:1019800021FF4CC080EE90E049C08091EA0180FFC9 +:10199000F9CF89E390E042C08091EA0182FF0EC056 +:1019A0008091EA0184FF03C080E090E037C083EEBD +:1019B00090E034C08091EA0182FFF2CF82EE90E0A5 +:1019C0002DC08091EA0183FF0BC08091EA0184FD64 +:1019D000EBCF87EE90E022C08091EA0183FFF5CF44 +:1019E00086EE90E01BC08091EA0185FF07C089E286 +:1019F00090E014C08091EA0185FFF9CF85E390E083 +:101A00000DC08091EA0186FF07C08AE290E006C01F +:101A10008091EA0186FFF9CF81E390E00E94F80A05 +:101A20000895089580916D0108959FB7F8941092DC +:101A30005C019FBF9091F001943009F057C09091E4 +:101A4000E9009F703091EC00232F217030FD20E8D9 +:101A5000922B24E02093E9002091EB0020FF43C06B +:101A60002091EE0027FF3FC020915A01222321F050 +:101A70002091E80025FF37C010925A0126E03091EE +:101A8000E80035FD15C03091F001343061F530913A +:101A9000EB0035FD28C0215021F481E080935A01EC +:101AA00022C0EFE9FFE03197F1F700C00000E7CF77 +:101AB0008093F1008091E80085FD0AC08091E800E4 +:101AC00080FFFCCF8091E8008E778093E80006C00D +:101AD0008FB7F89421E020935C018FBF9F709093A3 +:101AE000E90080E008959F709093E9008FEF0895DA +:101AF000CF93DF9300D01F92CDB7DEB79C018091CA +:101B0000F001843019F593E099833B832A83909305 +:101B1000E9008FEF9091E800815095FD06C095EDAA +:101B20009A95F1F700008111F5CF8091E80085FFCB +:101B30000DC040E050E063E070E0CE0101960E94ED +:101B400048108091E8008E778093E8000F900F9006 +:101B50000F90DF91CF910895CF93DF9300D01F9224 +:101B6000CDB7DEB72091F001243021F522E02983A2 +:101B70009B838A8383E08093E9008FEF9091E80054 +:101B8000815095FD06C095ED9A95F1F70000811101 +:101B9000F5CF8091E80085FF0DC040E050E063E0A4 +:101BA00070E0CE0101960E9448108091E8008E7787 +:101BB0008093E8000F900F900F90DF91CF910895E0 +:101BC0002091F0012430F1F422E02093E9002FEF7E +:101BD0003091E800215035FD06C035ED3A95F1F71A +:101BE00000002111F5CF2091E80025FF0BC040E057 +:101BF00050E065E070E00E9448108091E8008E7728 +:101C00008093E8000895CF93DF932091F001243072 +:101C100009F048C0EC0180910C018823E1F080912B +:101C20000D018823C1F085E08093E9008FEF90914A +:101C3000E800815095FD06C095E19A95F1F7000006 +:101C40008111F5CF8091E80085FF2CC040E050E085 +:101C500060E170E017C081E08093E9008FEF909120 +:101C6000E800815095FD06C095ED9A95F1F70000CA +:101C70008111F5CF8091E80085FF14C040E050E06D +:101C800068E070E0CE010E9448108091E8008E77F5 +:101C90008093E80080E1FE01ADE5B1E001900D9296 +:101CA0008A95E1F7DF91CF91089583E993E00E944F +:101CB00052078091EF01811109C00E94DD110E943D +:101CC0003A128091E20084608093E20008958FE8E8 +:101CD00093E00E9452071092EF0108958BE893E081 +:101CE0000C94520787E893E00E9452070C94ED2B66 +:101CF00083E893E00E9452070E94B7210E94F32BD1 +:101D00000E94DF140C94110D20915B012F5F822F34 +:101D100062E30E94612D992319F020935B010895DD +:101D200010925B0180915C01882371F18091F00138 +:101D3000843041F58091E9008F702091EC00922F62 +:101D4000917020FD90E8892B94E09093E9009091A8 +:101D5000EB0090FF14C09091EE0097FF10C090919F +:101D6000E80095FF03C01092F100F9CF9091E800D0 +:101D700090FF05C09091E8009E779093E8008F70E7 +:101D80008093E90010925C01089542E061EC81E0EB +:101D90000E94571142E061EC82E00E94571142E03C +:101DA00061EC83E00E94571142E261EC84E00E9402 +:101DB000571142E161EC85E00C9457118091F201DA +:101DC000833009F455C030F4813071F0823009F469 +:101DD0008EC008958A3009F47AC08B3009F460C04F +:101DE000893009F09CC020C08091F101813A09F04E +:101DF00096C08091E800877F8093E8008091F5018C +:101E00009091F601892B21F460E18DE591E003C00A +:101E100060E080E090E070E00E9493108091E80024 +:101E20008B778093E80008958091F101813209F069 +:101E300076C08091F5019091F601009719F0049712 +:101E400009F06DC08091E800877F8093E800809161 +:101E5000E80082FD05C08091F0018111F8CF5FC0DC +:101E60008091F10080936D018091E8008B7753C0E1 +:101E70008091F101813A09F052C08091F501909171 +:101E8000F601892B09F04BC08091E800877F809391 +:101E9000E8008091E80080FFFCCF80910C0136C003 +:101EA0008091F1018132D9F58091F5019091F6018F +:101EB000892BA9F58091E800877F8093E8000E9434 +:101EC0008C118091F30180930C010C94BB1A8091CA +:101ED000F101813221F58091E800877F8093E8004D +:101EE0000E948C118091F40180936E01089580917D +:101EF000F101813AA1F48091E800877F8093E800A6 +:101F00008091E80080FFFCCF80916E018093F1000A +:101F10008091E8008E778093E8000C948C110895EE +:101F200084B7877F84BF88E10FB6F8948093600000 +:101F3000109260000FBE90E080E80FB6F894809396 +:101F40006100909361000FBE0E946C150E94DD112C +:101F50000E943A128091E20084608093E20085E161 +:101F60009DE00E94F62078940E94BF140E946E1596 +:101F700082E091E00E94DA140E94DB2B82E793E07A +:101F80000E9452078091F001853089F48EE693E03B +:101F90000E9452070E947B218091EE01882391F3D9 +:101FA0000E94A321882371F30E943210EBCF0E947C +:101FB0009C15E8CF292F332723303105C9F064F46D +:101FC0002130310581F02230310509F043C08DE820 +:101FD00090E02BEC33E042C021323105F1F02232A7 +:101FE000310541F137C082E190E028E534E036C0A8 +:101FF00099278130910541F08230910541F0892B7C +:1020000049F5E7ECF3E005C0EFEAF3E002C0E7E9E9 +:10201000F3E0849190E09F0121C06530D8F4E62F71 +:10202000F0E0EE0FFF1FEB5DFE4F2081318189E074 +:1020300090E014C0653070F470E0FB01EE0FFF1FFC +:10204000E55EFE4F20813181FB01EA5EFE4F80811B +:1020500090E004C080E090E020E030E0FA013183BD +:102060002083089580E189BD82E189BD09B400FE25 +:10207000FDCF8091D8008F7D8093D8008091E000C3 +:1020800082608093E0008091E00081FDFCCF0895A4 +:10209000CF92DF92EF92FF920F931F93CF93DF9334 +:1020A000EC018B016A010E94AB11811133C0C11494 +:1020B000D10439F0F60180819181081B190BC80FFA +:1020C000D91FE12CF12C0115110519F18091E800BF +:1020D00085FD16C08091E8008E778093E800C114DA +:1020E000D10449F0F60180819181E80EF91EF18258 +:1020F000E08285E00FC00E94AB11882321F30AC063 +:1021000089918093F10001501109FFEFEF1AFF0A46 +:10211000DACF80E0DF91CF911F910F91FF90EF9088 +:10212000DF90CF9008952091F7013091F8012617A4 +:10213000370748F06115710539F42091E8002E77D2 +:102140002093E80001C0B90140E061157105A9F1D3 +:102150002091F001222309F443C0253009F442C044 +:102160002091E80023FD40C02091E80022FD32C00C +:102170002091E80020FFE9CF4091F3002091F20088 +:1021800030E0342BFC01CF016115710559F0283086 +:10219000310540F481918093F100615071092F5F06 +:1021A0003F4FF1CF41E02830310509F040E0209168 +:1021B000E8002E772093E800C8CF4111C9CF0AC0AC +:1021C0008091F001882361F0853061F08091E80012 +:1021D00083FD0AC08091E80082FFF2CF80E008957D +:1021E00082E0089583E0089581E008952091F70149 +:1021F0003091F8012617370748F06115710539F459 +:102200002091E8002E772093E80001C0B901FC017D +:1022100020E06115710591F18091F001882309F4A6 +:1022200040C0853009F43FC08091E80083FD3DC087 +:102230008091E80082FD2FC08091E80080FFE9CF07 +:102240002091F3008091F20090E0922B61157105CE +:1022500059F08830910540F424912093F100319693 +:10226000615071090196F2CF21E0089709F020E052 +:102270008091E8008E778093E800CBCF2111CCCFFE +:102280000AC08091F001882361F0853061F080916F +:10229000E80083FD0AC08091E80082FFF2CF80E071 +:1022A000089582E0089583E0089581E00895982FCD +:1022B000973058F59093E900981739F07091EC0039 +:1022C0002091ED005091F00003C0242F762F50E0B4 +:1022D00021FF19C03091EB003E7F3093EB0030912D +:1022E000ED003D7F3093ED003091EB003160309395 +:1022F000EB007093EC002093ED005093F0002091E0 +:10230000EE0027FF07C09F5FD3CF8F708093E90057 +:1023100081E0089580E008958091F10187FF11C068 +:102320008091E80082FD05C08091F0018111F8CF15 +:1023300011C08091E8008B770BC08091F001882359 +:1023400049F08091E80080FFF8CF8091E8008E7717 +:102350008093E80008952091E4003091E50095E62F +:102360004091EC00842F817040FF22C08091E800F2 +:1023700080FD1CC08091F001882391F0853091F0A0 +:102380008091EB0085FD10C04091E4005091E50084 +:102390004217530729F39A01915011F784E00895E9 +:1023A00082E0089583E0089581E0089580E0089533 +:1023B0004091E80042FFDECF08950E944B120E9438 +:1023C0005312E0EEF0E0808181608083E8EDF0E080 +:1023D00080818F77808319BCA7EDB0E08C918E7FD0 +:1023E0008C9380818F7E80831092EF0108950F93EC +:1023F0001F93CF93DF930E944B120E945312C8ED9C +:10240000D0E088818F7788838881806888838881FD +:102410008F7D888319BC1092F0011092EC0110920C +:10242000EE011092ED0100EE10E0F80180818B7F4B +:10243000808388818160888342E060E080E00E9440 +:102440005711E1EEF0E080818E7F8083E2EEF0E0D4 +:10245000808181608083808188608083F8018081B1 +:102460008E7F8083888180618883DF91CF911F91E7 +:102470000F910895E8EDF0E080818F7E8083E7ED95 +:10248000F0E080818160808384E082BF81E080937E +:10249000EF010C94F711E8EDF0E080818E7F8083EE +:1024A0001092E20008951092DA001092E10008956F +:1024B0001F920F920FB60F9211242F933F934F93B9 +:1024C0005F936F937F938F939F93AF93BF93EF939C +:1024D000FF938091E10082FF0BC08091E20082FFB8 +:1024E00007C08091E1008B7F8093E1000E94840E01 +:1024F0008091DA0080FF1FC08091D80080FF1BC050 +:102500008091DA008E7F8093DA008091D90080FF7D +:102510000DC080E189BD82E189BD09B400FEFDCF17 +:1025200081E08093F0010E94550E05C019BC109205 +:10253000F0010E94670E8091E10080FF19C0809138 +:10254000E20080FF15C08091E2008E7F8093E20060 +:102550008091E20080618093E2008091D8008062E7 +:102560008093D80019BC85E08093F0010E94720E20 +:102570008091E10084FF30C08091E20084FF2CC094 +:1025800080E189BD82E189BD09B400FEFDCF809163 +:10259000D8008F7D8093D8008091E1008F7E80935A +:1025A000E1008091E2008F7E8093E2008091E20062 +:1025B00081608093E2008091EC01882311F084E037 +:1025C00007C08091E30087FD02C081E001C083E085 +:1025D0008093F0010E94780E8091E10083FF29C072 +:1025E0008091E20083FF25C08091E100877F809386 +:1025F000E10082E08093F0011092EC018091E10013 +:102600008E7F8093E1008091E2008E7F8093E200D4 +:102610008091E20080618093E20042E060E080E02F +:102620000E9457118091F00088608093F0000E9412 +:102630006E0EFF91EF91BF91AF919F918F917F911E +:102640006F915F914F913F912F910F900FBE0F901F +:102650001F9018951F920F920FB60F9211242F936F +:102660003F934F935F936F937F938F939F93AF931A +:10267000BF93CF93DF93EF93FF93C091E900CF70A7 +:102680008091EC00D82FD17080FDD0E81092E90045 +:102690008091F000877F8093F00078940E946E1301 +:1026A0001092E9008091F00088608093F000CD2BBB +:1026B000CF70C093E900FF91EF91DF91CF91BF916F +:1026C000AF919F918F917F916F915F914F913F91CA +:1026D0002F910F900FBE0F901F9018951F93CF93BF +:1026E000DF93CDB7DEB7AA970FB6F894DEBF0FBE63 +:1026F000CDBFE1EFF1E088E08E0F9091F100919372 +:102700008E13FBCF0E94DE0E8091E80083FF1FC175 +:102710008091F1019091F201492F50E04A3051052A +:1027200008F015C1FA01EA5AFF4F0C94812D803848 +:1027300081F0823809F00BC18091F5018F70809390 +:10274000E9008091EB0085FB882780F91092E90071 +:1027500006C08091ED019091EE01911182609091FF +:10276000E800977F9093E8008093F1001092F100C9 +:10277000C8C0282F2D7F09F0EAC0882319F08230C5 +:1027800061F0E5C08091F301813009F0E0C0933041 +:1027900009F080E08093EE012BC08091F30181115C +:1027A00027C08091F5018F7009F4D1C08093E900B2 +:1027B0002091EB0020FF1CC0933021F48091EB00AE +:1027C000806214C09091EB0090619093EB0021E047 +:1027D00030E0A90102C0440F551F8A95E2F74093EB +:1027E000EA001092EA008091EB0088608093EB0091 +:1027F0001092E9008091E800877F86C08111A7C010 +:102800001091F3011F778091E3008078812B8093F2 +:10281000E3008091E800877F8093E8000E948C119C +:102820008091E80080FFFCCF8091E3008068809376 +:10283000E300111102C082E001C083E08093F00147 +:1028400086C08058823008F082C08091F301909158 +:10285000F4018C3D53E0950779F583E08A838AE2A1 +:1028600089834FB7F894DE01139620E03EE051E2F1 +:10287000E32FF0E050935700E49120FF03C0E2956E +:10288000EF703F5FEF708E2F90E0EA3010F0C79648 +:1028900001C0C0968D939D932F5F243149F74FBFA0 +:1028A0008091E800877F8093E8006AE270E0CE01C3 +:1028B00001960E94931014C0AE014F5F5F4F60916C +:1028C000F5010E94DA0FBC01892B09F440C09091F8 +:1028D000E800977F9093E80089819A810E94F61022 +:1028E0008091E8008B778093E80031C0803879F5DB +:1028F0008091E800877F8093E8008091EC018093CD +:10290000F1008091E8008E778093E8000E948C119E +:102910001EC081111CC09091F3019230C0F48091CF +:10292000E800877F8093E8009093EC010E948C116F +:102930008091EC01811106C08091E30087FD02C007 +:1029400081E001C084E08093F0010E94C50E809177 +:10295000E80083FF0AC08091E800877F8093E80049 +:102960008091EB0080628093EB00AA960FB6F894FA +:10297000DEBF0FBECDBFDF91CF911F910895CF93E2 +:102980008091F0018823A1F0C091E900CF7090916F +:10299000EC00892F817090FD80E8C82B1092E9002F +:1029A0008091E80083FD0E946E13CF70C093E90010 +:1029B000CF91089590937401809373010895E091ED +:1029C0007301F0917401309721F00190F081E02DB6 +:1029D000099480E00895EF92FF920F931F93CF9395 +:1029E000DF93E0917301F09174013097B1F18C01A4 +:1029F0000280F381E02D09958091D70182FF2DC0DF +:102A000080FF04C08DE895E00E945207E80110E1C4 +:102A100087E8E82E85E0F82E8091D70180FF0BC073 +:102A200088811F928F93FF92EF920E94EB070F9085 +:102A30000F900F900F90115021961111EDCF8091B2 +:102A4000D70180FF0AC085E895E0DF91CF911F9103 +:102A50000F91FF90EF900C945207DF91CF911F914F +:102A60000F91FF90EF900895E0917301F091740140 +:102A7000309721F00480F581E02D0994089520918C +:102A80007101309172018217930771F09093720176 +:102A900080937101E0917301F0917401309721F0FE +:102AA0000680F781E02D0994089520916F013091FF +:102AB00070018217930771F09093700180936F01FA +:102AC000E0917301F0917401309721F00084F18559 +:102AD000E02D0994089508950C946B150E94B92176 +:102AE0000E9462090C947F22CF93C82F8091D70156 +:102AF00082FF1EC080FF04C086EA95E00E94520754 +:102B00008091D70180FF0CC01F92CF9381EA95E09E +:102B10009F938F930E94EB070F900F900F900F9051 +:102B20008091D70180FF04C08FE995E00E94520791 +:102B30008C2FCF910C94110DCF92DF92EF92FF92D8 +:102B40000F931F93CF93DF93CDB7DEB72B970FB6BD +:102B5000F894DEBF0FBECDBF0E947F0986E7C82E66 +:102B600081E0D82E00E010E0E02E802F0E94AB0A1A +:102B7000F60141916F01F42EF826B1F40F5F1F4F5B +:102B80000E30110589F78FEF89838A831B820E949B +:102B9000C2218160782F9D838C8349815A816B810A +:102BA0008D810E943F1640C09091D70191FF04C0D3 +:102BB0008B870E94B10A8B8520E030E04F2D50E0DA +:102BC000922FBA01022E02C0759567950A94E2F71A +:102BD00060FF24C02E83EF8221E030E0690102C053 +:102BE000CC0CDD1C9A95E2F790E08C219D21892B7D +:102BF00009F420E028870E94C2218160782F9A87FB +:102C000089874E815F8168858A850E943F16F80119 +:102C1000EA58FE4F8081C826C08206C02F5F3F4F12 +:102C20002630310569F6AACF0E94F0251091750172 +:102C30000E94DF141817A1F00E94DF148093750121 +:102C40002B960FB6F894DEBF0FBECDBFDF91CF91AC +:102C50001F910F91FF90EF90DF90CF900C9474151F +:102C60002B960FB6F894DEBF0FBECDBFDF91CF918C +:102C70001F910F91FF90EF90DF90CF900895CF9329 +:102C8000DF93CDB7DEB72B970FB6F894DEBF0FBE3C +:102C9000CDBF4F83588769877A878B87DE0111966E +:102CA00086E0FD0111928A95E9F785E0FE013796ED +:102CB00001900D928A95E1F749815A816B817C815F +:102CC0008D819E810E94551D2B960FB6F894DEBF14 +:102CD0000FBECDBFDF91CF910895CF93882309F424 +:102CE000C2C0C82F823859F40E94DF1481FDBBC0D6 +:102CF00089E30E94F11F0E94D02089E30CC0833831 +:102D000079F40E94DF1480FDAEC083E50E94F11FBC +:102D10000E94D02083E50E944420CF910C94D020C3 +:102D2000843859F40E94DF1482FD9DC087E40E941C +:102D3000F11F0E94D02087E4EECF8CEF8C0F813AF8 +:102D400048F48C2F0E94832A81118DC08C2F0E9401 +:102D5000F11FE3CF80E28C0F883048F4C77081E028 +:102D600001C0880FCA95EAF70E949920D6CF8BE55B +:102D70008C0F833078F4C53A29F0C63A31F083E8F5 +:102D800090E005C081E890E002C082E890E0CF9139 +:102D90000C943F1588E58C0F833108F064C0C83A65 +:102DA00039F1C93A41F1CA3A49F1CB3A51F1CC3A39 +:102DB00059F1CD3A61F1C03B69F1CE3A71F1CF3AA8 +:102DC00079F1C13B81F1C23B89F1C33B91F1C43B35 +:102DD00099F1C53BA1F1C63BA9F1C73BB1F1C83B95 +:102DE000B9F1C93BC1F1CA3BC9F180E090E038C0FC +:102DF00082EE90E035C089EE90E032C08AEE90E03D +:102E00002FC085EB90E02CC086EB90E029C087EBCB +:102E100090E026C08CEC90E023C08DEC90E020C0C8 +:102E200083E891E01DC08AE891E01AC082E991E050 +:102E300017C084E991E014C081E292E011C083E2FE +:102E400092E00EC084E292E00BC085E292E008C0FE +:102E500086E292E005C087E292E002C08AE292E058 +:102E6000CF910C945515CF910895882309F44BC048 +:102E7000823859F40E94DF1481FF45C089E30E9423 +:102E8000F11F0E94D02089E30CC0833871F40E94A6 +:102E9000DF1480FF38C083E50E94F11F0E94D0201C +:102EA00083E50E9444200C94D020843859F40E9479 +:102EB000DF1482FF28C087E40E94F11F0E94D02007 +:102EC00087E4EFCF9CEF980F913A58F390E2980F78 +:102ED000983050F4877091E001C0990F8A95EAF715 +:102EE000892F0E949F20DFCF9BE5980F933020F41D +:102EF00080E090E00C943F15885A833120F480E004 +:102F000090E00C9455150895882321F00E94992093 +:102F10000C94D0200895882321F00E949F200C94C7 +:102F2000D0200895BF92CF92DF92EF92FF920F933D +:102F30001F93CF93DF9300D000D000D0CDB7DEB782 +:102F400025E0FC01DE01119601900D922A95E1F732 +:102F5000FC01408131810281258122952F7063819E +:102F60007481672B09F4E5C23F3F19F44F3F09F420 +:102F7000E0C27C0149833A8389819A812E830E9431 +:102F8000B01F182FB92E0E94AF1F0E94761EEB2D86 +:102F9000E295EF70F0E0E05AFF4F2E810C94812D06 +:102FA0008B2D807F9B2D9F70F92E882319F0F29432 +:102FB00080EFF822002349F0FF2009F467C28F2D2B +:102FC0000E94A9200E94D02061C2812F0E94351743 +:102FD000FF2009F4AEC28F2D0E94AF2026960FB6B7 +:102FE000F894DEBF0FBECDBFDF91CF911F910F913F +:102FF000FF90EF90DF90CF90BF900C94D0203B2DAE +:10300000307F8B2D8F70303211F08295807F1123AD +:1030100019F0113021F12CC00023B9F0222309F45A +:10302000A0C1213009F09DC126960FB6F894DEBFED +:103030000FBECDBFDF91CF911F910F91FF90EF9009 +:10304000DF90CF90BF900C94B920222319F021304B +:1030500009F46FC28E830E94BC208E8196C100232A +:1030600021F0223008F065C27CC1211162C28DC1FD +:10307000002321F0222309F474C108C2222309F499 +:1030800084C119C22B2D26952695237030E0211579 +:10309000310521F021303105D1F04BC2002321F060 +:1030A000812F9B2D937002C080E090E026960FB692 +:1030B000F894DEBF0FBECDBFDF91CF911F910F916E +:1030C000FF90EF90DF90CF90BF900C943F150023BE +:1030D00021F0812F9B2D937002C080E090E0269616 +:1030E0000FB6F894DEBF0FBECDBFDF91CF911F9119 +:1030F0000F91FF90EF90DF90CF90BF900C945515FB +:10310000812F002319F00E94762402C00E94DE2441 +:1031100026960FB6F894DEBF0FBECDBFDF91CF91DC +:103120001F910F91FF90EF90DF90CF90BF900C9484 +:1031300063258B2D837009F07BC00111FAC1812FAB +:10314000829586958770880F880F912F9F70C92E62 +:10315000D12CE12CF12C082E04C0CC0CDD1CEE1C73 +:10316000FF1C0A94D2F714FF12C04FE050E060E059 +:1031700070E004C0440F551F661F771F8A95D2F771 +:10318000CB01BA01609570958095909503C060E081 +:1031900070E0CB012B2D269526952370422F50E011 +:1031A00042305105D9F04330510569F16C297D2930 +:1031B0008E299F294130510551F126960FB6F8947A +:1031C000DEBF0FBECDBFDF91CF911F910F91FF905A +:1031D000EF90DF90CF90BF900C949D1E6C297D29BD +:1031E0008E299F2926960FB6F894DEBF0FBECDBF5D +:1031F000DF91CF911F910F91FF90EF90DF90CF90D3 +:10320000BF900C94B91E0E949D1EC701B601269660 +:103210000FB6F894DEBF0FBECDBFDF91CF911F91E7 +:103220000F91FF90EF90DF90CF90BF900C94811E94 +:10323000002319F08B2D817001C08695882309F435 +:1032400078C1812F829586958770880F880F912F7E +:103250009F70C92ED12CE12CF12C082E04C0CC0C6F +:10326000DD1CEE1CFF1C0A94D2F714FF12C04FE0C5 +:1032700050E060E070E004C0440F551F661F771FE8 +:103280008A95D2F7CB01BA0160957095809590959B +:1032900003C060E070E0CB012B2D269526952370AE +:1032A000422F50E042305105D9F04330510569F1C9 +:1032B0006C297D298E299F294130510551F126968F +:1032C0000FB6F894DEBF0FBECDBFDF91CF911F9137 +:1032D0000F91FF90EF90DF90CF90BF900C94771FED +:1032E0006C297D298E299F2926960FB6F894DEBF7A +:1032F0000FBECDBFDF91CF911F910F91FF90EF9047 +:10330000DF90CF90BF900C94931F0E94771FC7014E +:10331000B60126960FB6F894DEBF0FBECDBFDF9183 +:10332000CF911F910F91FF90EF90DF90CF90BF90C2 +:103330000C945B1F103FD1F118F4103E50F4A1C063 +:10334000123F09F463C008F44CC0133F09F473C082 +:1033500098C01F708B2D8F710023A1F00E94F41E66 +:10336000812F26960FB6F894DEBF0FBECDBFDF913A +:10337000CF911F910F91FF90EF90DF90CF90BF9072 +:103380000C9484170E94151F812F26960FB6F8946F +:10339000DEBF0FBECDBFDF91CF911F910F91FF9088 +:1033A000EF90DF90CF90BF900C948B170023A9F083 +:1033B0002111BFC08B2D8F7126960FB6F894DEBFFA +:1033C0000FBECDBFDF91CF911F910F91FF90EF9076 +:1033D000DF90CF90BF900C943A1F223008F0A9C024 +:1033E000E9CF0023A9F08B2D8F7126960FB6F894A4 +:1033F000DEBF0FBECDBFDF91CF911F910F91FF9028 +:10340000EF90DF90CF90BF900C94F41E002359F3FF +:103410008B2D8F7126960FB6F894DEBF0FBECDBFF1 +:10342000DF91CF911F910F91FF90EF90DF90CF90A0 +:10343000BF900C94151F002399F08B2D8F71269649 +:103440000FB6F894DEBF0FBECDBFDF91CF911F91B5 +:103450000F91FF90EF90DF90CF90BF900C94DF1E04 +:1034600026960FB6F894DEBF0FBECDBFDF91CF9189 +:103470001F910F91FF90EF90DF90CF90BF900C9431 +:10348000D51E0023A9F0222309F4ADCF812F269663 +:103490000FB6F894DEBF0FBECDBFDF91CF911F9165 +:1034A0000F91FF90EF90DF90CF90BF900C946D162E +:1034B000222309F4ADCF812F26960FB6F894DEBFF4 +:1034C0000FBECDBFDF91CF911F910F91FF90EF9075 +:1034D000DF90CF90BF900C9435174B2D4F70612F1C +:1034E000C7010E94F40726960FB6F894DEBF0FBE00 +:1034F000CDBFDF91CF911F910F91FF90EF90DF90A3 +:10350000CF90BF900C94F91D4B2D4F70612FC701C8 +:1035100026960FB6F894DEBF0FBECDBFDF91CF91D8 +:103520001F910F91FF90EF90DF90CF90BF900C9480 +:10353000B70B26960FB6F894DEBF0FBECDBFDF9156 +:10354000CF911F910F91FF90EF90DF90CF90BF90A0 +:1035500008950E94B6200E948B200E94D0200E94D5 +:1035600096260E94632580E090E00E943F1580E04F +:1035700090E00C9455150E94A6200C94A91A0E9464 +:10358000B01F292F22952F7030E02C3031054CF4DC +:103590002A3031056CF4225031092230310588F48B +:1035A00007C02C30310549F02F30310531F009C00A +:1035B000803E48F0803F29F406C093FB882780F9BD +:1035C000089580E0089581E00895CF93DF9300D0BF +:1035D00000D01F92CDB7DEB70F900F900F900F90D5 +:1035E0000F90DF91CF910895CF93DF9300D000D05B +:1035F00000D0CDB7DEB726960FB6F894DEBF0FBE6B +:10360000CDBFDF91CF9108951F93CF93DF93C091EA +:10361000840116E080918501C81799F0D0E01C9FC5 +:10362000F0011D9FF00D1124EA57FE4F408151819A +:1036300062817381848195810E94F41A2196C770FA +:10364000E9CFDF91CF911F9108954091B60150913C +:10365000B7016091B8017091B9018091BA01909160 +:10366000BB010C94F41A8091BB0182958F7009F014 +:1036700054C08091B801882309F44FC0809184011F +:10368000A09185016091B6017091B7014091B90197 +:103690005091BA01B6E08A1709F43FC090E0411595 +:1036A0005105C1F17F3F11F46F3FA1F1B89FF001C7 +:1036B000B99FF00D1124EA57FE4F218172132AC0E1 +:1036C0002081621327C02281211124C023813481EB +:1036D0002417350710F421503109241B350B283CE1 +:1036E0003105C0F42091BB012F7020612093BB01F4 +:1036F00026E0289FF001299FF00D1124E557FE4F89 +:1037000080818F708061808386EB91E00E949217A8 +:103710000C94041B01968770BECF0895CF92DF9260 +:10372000EF92FF920F931F93CF93DF93CDB7DEB746 +:1037300062970FB6F894DEBF0FBECDBF8C0185E057 +:10374000F801DE011D9601900D928A95E1F7D801EE +:103750004C9111965C91119712966C911297139659 +:10376000CD90DC9014973091B6017091B7018091A3 +:10377000B9019091BA01009709F46BC17F3F19F428 +:103780003F3F09F466C1E090B801EE2009F4C0C0E3 +:103790002091BB01C816D90628F0F601E81BF90BE9 +:1037A000CF0104C0809590958C0D9D1DFF24F3944E +:1037B000883C910578F0F12C207F09F0C6C07C2D63 +:1037C000D98AC88A89890E94E51A86EB91E00E940D +:1037D0009217B1C0822F807F09F046C0751314C0C4 +:1037E000341312C0611110C02F7020612093BB01EF +:1037F0000E94251B86EB91E00E9492178091BB01ED +:10380000D80115968C932EC0CD2819F15F3F11F485 +:103810004F3FF9F0F62E61111CC080918401209178 +:10382000850136E0821709F45AC090E0389FF00114 +:10383000399FF00D1124EA57FE4F7181571306C0CE +:103840007081471303C07281711103C001968770A4 +:10385000E9CFF62E662309F418C18091BB0181607F +:103860008093BB01F12C11C1751308C0341306C03D +:10387000611104C08091BB01D801C3C04D875E8730 +:103880008D859E856A8B0E94BF1A6A898823E1F123 +:103890006623D1F12091BB01822F82958F7090E039 +:1038A000029774F08091B6019091B70198878F8349 +:1038B0001986DB86CA862C87CE0107960E9492174E +:1038C00086E0F801A6EBB1E001900D928A95E1F750 +:1038D0000E94331B0E94251BFF24F394D6C04D8702 +:1038E0005E878D859E850E94B01F292F22952F709F +:1038F00030E0223031050CF0BCC09F7009F0B6C03A +:10390000805E883008F4C1C0C8010E949217E4CFDD +:10391000C816D90608F453C0F601E81BF90BCF010D +:10392000883C910508F450C0F12C7C2DD98AC88AB6 +:1039300089890E94E51AE6EBF1E086E0DF011D923D +:103940008A95E9F70E94251BA0C0751314C0341393 +:1039500012C0611110C08091BB01F8018583C801BC +:103960000E94921786E0E6EBF1E0DF011D928A9556 +:10397000E9F7FE2C8AC04D875E878D859E856A8B10 +:103980000E94BF1A6A89882309F4BECF662309F40E +:10399000BBCF2091BB01822F82958F7090E0029760 +:1039A0000CF48ECF8091B6019091B7019A838983F0 +:1039B0001B82DD82CC822E83CE0101967FCF809543 +:1039C00090958C0D9D1DACCFF62E662309F49CCFEF +:1039D00075132EC034132CC02091BB0120FD1FC0D5 +:1039E000822F82958F70D9F0D80115962C93159758 +:1039F0008F3049F08F5F982F9295907F822F8F7034 +:103A0000892B15968C93C8010E94921786E0F801C5 +:103A1000A6EBB1E001900D928A95E1F793CF86E095 +:103A2000F801A6EBB1E001900D928A95E1F72DC067 +:103A30004D875E878D859E850E94BF1A811140CF7C +:103A40008091BB0181608093BB01C8010E949217E5 +:103A50001CC0662309F458CF4D875E878D859E85EF +:103A60000E94BF1A882309F44FCF2ACF811148CF73 +:103A70000CC0243031050CF047CF9F7009F440CFC3 +:103A8000F8019581907F09F03BCF8F2D62960FB69C +:103A9000F894DEBF0FBECDBFDF91CF911F910F9184 +:103AA000FF90EF90DF90CF9008951F93CF93DF9317 +:103AB000CDB7DEB72C970FB6F894DEBF0FBECDBFE3 +:103AC0004F83588769877A878B879C87CE010796B3 +:103AD0000E948E1B882369F08F8198852A853B85FB +:103AE000232BF1F19F3F09F063C08F3F09F060C0C5 +:103AF00037C086E0FE013796DE01119601900D92E7 +:103B00008A95E1F76F817885EA85FB85309741F1E9 +:103B10007F3F11F46F3F21F12091850130E0C90111 +:103B20000196877099274091840150E0841795078A +:103B300009F447C069837A83FD83EC8396E0929F02 +:103B4000D001939FB00D1124AA57BE4FFE013196AC +:103B500001900D929A95E1F7809385010E94041BD4 +:103B600016E080918401909185018917C1F1189F19 +:103B7000C00111248A579E4F0E948E1B882379F121 +:103B8000E09184011E9FF0011124EA57FE4F40810D +:103B9000518162817381848195810E94F41A8091A0 +:103BA000840190E001968770992780938401D9CF92 +:103BB0004F81588569857A858B859C850E94F41A8A +:103BC000CFCF0E94BB1A1092850110928401E6EBC0 +:103BD000F1E086E0DF011D928A95E9F7C1CF2C96CE +:103BE0000FB6F894DEBF0FBECDBFDF91CF911F910E +:103BF0000895EF92FF920F931F93CF93DF938C0161 +:103C0000892B09F46CC0F12CEE24E394E801219691 +:103C1000F8018491843740F4843008F051C0813039 +:103C200081F0823019F15BC0853709F444C0A8F1F6 +:103C30009CE7980F903708F052C08F770E94351795 +:103C400041C00E5F1F4FFE01C49180E28C0F88308F +:103C500048F4C7708E2D01C0880FCA95EAF70E94FC +:103C6000A92014C08C2F0E946D162DC00E5F1F4F0F +:103C7000FE01C49180E28C0F883058F4C7708E2DFD +:103C800001C0880FCA95EAF70E94AF200E94D02099 +:103C90001AC08C2F0E94351716C00E5F1F4FFE01F1 +:103CA000C491CC2381F08FE99FE00197F1F700C028 +:103CB0000000C150F6CF0E5F1F4FFE01F49003C00D +:103CC0000E946D168E018F2D882309F49FCFEFE996 +:103CD000FFE03197F1F700C000008150F5CFDF9190 +:103CE000CF911F910F91FF90EF90089508956093E9 +:103CF000C0017093C1018093C2019093C3010C94E1 +:103D0000A91A0F931F930091C0011091C101209136 +:103D1000C2013091C301DC01CB01802B912BA22B7E +:103D2000B32B8093C0019093C101A093C201B093C3 +:103D3000C3011F910F910C94A91A0F931F93009127 +:103D4000C0011091C1012091C2013091C301DC0179 +:103D5000CB0180239123A223B3238093C0019093AE +:103D6000C101A093C201B093C3011F910F910C94A4 +:103D7000A91A0F931F930091C0011091C1012091C6 +:103D8000C2013091C301DC01CB0180279127A2271A +:103D9000B3278093C0019093C101A093C201B09357 +:103DA000C3011F910F910C94A91A1092BC0110929B +:103DB000BD011092BE011092BF010C94A91A41E0FE +:103DC00050E060E070E004C0440F551F661F771F8D +:103DD0008A95D2F74093BC015093BD016093BE0118 +:103DE0007093BF010C94A91A41E050E060E070E0CC +:103DF00004C0440F551F661F771F8A95D2F7809124 +:103E0000BC019091BD01A091BE01B091BF01482BB2 +:103E1000592B6A2B7B2B4093BC015093BD016093BF +:103E2000BE017093BF010C94A91A41E050E060E01C +:103E300070E004C0440F551F661F771F8A95D2F7A4 +:103E400040955095609570958091BC019091BD0111 +:103E5000A091BE01B091BF01482359236A237B235F +:103E60004093BC015093BD016093BE017093BF01AC +:103E70000C94A91A41E050E060E070E004C0440FE7 +:103E8000551F661F771F8A95D2F78091BC019091CC +:103E9000BD01A091BE01B091BF01482759276A27F3 +:103EA0007B274093BC015093BD016093BE0170938A +:103EB000BF010C94A91A0F931F930091BC0110919C +:103EC000BD012091BE013091BF01DC01CB01802BEF +:103ED000912BA22BB32B8093BC019093BD01A09397 +:103EE000BE01B093BF011F910F910C94A91A0F93BB +:103EF0001F930091BC011091BD012091BE01309132 +:103F0000BF01DC01CB0180239123A223B323809343 +:103F1000BC019093BD01A093BE01B093BF011F915E +:103F20000F910C94A91A0F931F930091BC0110914B +:103F3000BD012091BE013091BF01DC01CB01802782 +:103F40009127A227B3278093BC019093BD01A09332 +:103F5000BE01B093BF011F910F910C94A91A08954F +:103F6000CF92DF92EF92FF920F931F93CF93DF9345 +:103F70008C01C090C001D090C101E090C201F090CE +:103F8000C3014091BC015091BD016091BE0170918F +:103F9000BF01C42AD52AE62AF72ACFE1D0E0D7010B +:103FA000C6010C2E04C0B695A795979587950A94DF +:103FB000D2F780FF07C0B8018C2F0E94DA0B813046 +:103FC000910531F4219758F7B80180E00E94DA0B8F +:103FD000DF91CF911F910F91FF90EF90DF90CF90E5 +:103FE000089590910C01992321F090910D01911168 +:103FF00009C020910E0130910F01F90132969FEF17 +:1040000040E030C0982F9695969596959F30A0F4F5 +:10401000E0910E01F0910F01E90FF11D877021E091 +:1040200030E0A90102C0440F551F8A95E2F7CA018A +:104030009181892B818308959091D70190FF23C0AE +:104040001F928F9387ED95E09F938F930E94EB07CC +:104050000F900F900F900F9008959F3F39F04F5F92 +:104060004E3041F051915813F8CF0DC05111F7CF98 +:10407000942FF5CF9F3F39F0F901E90FF11D97FD1E +:10408000FA9582830895089590910C01992321F067 +:1040900090910D01911109C020910E0130910F01F5 +:1040A000F9013296205F3F4F30C0982F9695969534 +:1040B00096959F30A8F4E0910E01F0910F01E90F61 +:1040C000F11D877021E030E0A90102C0440F551FA7 +:1040D0008A95E2F7CA0180959181892381830895A9 +:1040E0009091D70190FF16C01F928F9389EB95E0B6 +:1040F0009F938F930E94EB070F900F900F900F905C +:1041000008953196E217F30729F090819813F9CFBB +:104110001082F7CF089581E090E0E0910E01F091D8 +:104120000F01E80FF91F1082019680319105A9F760 +:1041300008959091D601892B8093D601089580959A +:104140009091D60189238093D60108951092D601CB +:1041500008959091D501892B8093D501089580957C +:104160009091D50189238093D50108951092D501AE +:1041700008958093C40108951092C4010895809118 +:104180000E0190910F01FC0131969C01205F3F4F81 +:1041900080E0919191118F5FE217F307D1F70895B5 +:1041A000E0910E01F0910F018091D6018083E091A2 +:1041B0000E01F0910F0190818091D501892B8083B0 +:1041C0008091C401882361F0E0910E01F0910F010C +:1041D0009081892B80830E94BF2081111092C4019D +:1041E00080910E0190910F010C94EB1490933B0180 +:1041F00080933A010895CF92DF92EF92FF926C0183 +:10420000EE24FF24C114D104E104F10421F0C7011C +:10421000B60120E101C020E0C72ED82EE92EFF24F0 +:10422000C114D104E104F10419F0285FC701B601FB +:104230006B017C0154E0F694E794D794C7945A95A7 +:10424000D1F7C114D104E104F10419F02C5FC701C6 +:10425000B6016B017C0142E0F694E794D794C794D1 +:104260004A95D1F7C114D104E104F10419F02E5F8D +:10427000C701B601DC01CB01B695A7959795879547 +:10428000892B8A2B8B2B09F02F5F822FFF90EF90C9 +:10429000DF90CF9008958295982F9C7C392F36958A +:1042A0003695282F237344E0249FC0011124932FB7 +:1042B000982B292F2A7A2695892F8575880F822B8E +:1042C00008951F93CF93DF931F92CDB7DEB79983E5 +:1042D0000E944B21182F9981892F0E944B21212F59 +:1042E00030E0322F2227A901482BCA010F90DF911D +:1042F000CF911F9108958091F001843009F11092BF +:10430000D80120E488E190E00FB6F894A895809356 +:1043100060000FBE2093600083B7817F846083BFFD +:1043200083B7816083BF7894889583B78E7F83BF7E +:1043300088E10FB6F89480936000109260000FBE81 +:10434000089508950895CF930E94A1210E947F09A6 +:104350000E94A221C0E08C2F0E94AB0A811104C0F0 +:10436000CF5FCE30C1F701C081E0CF9108950C94AA +:10437000BB1A82E084BD93E095BD9AEF97BD809310 +:104380006E0008952FB7F8948091D9019091DA01C9 +:10439000A091DB01B091DC012FBF0895CF92DF9295 +:1043A000EF92FF920F931F932FB7F8944091D9018A +:1043B0005091DA016091DB017091DC012FBF6A013D +:1043C0007B01EE24FF248C0120E030E0C016D106F2 +:1043D000E206F30610F4415051099A01281B390BEB +:1043E000C9011F910F91FF90EF90DF90CF9008953A +:1043F0001F920F920FB60F9211248F939F93AF933A +:10440000BF938091D9019091DA01A091DB01B09125 +:10441000DC010196A11DB11D8093D9019093DA01B1 +:10442000A093DB01B093DC01BF91AF919F918F917D +:104430000F900FBE0F901F9018950E94DD11F894F9 +:104440002FEF87EA91E6215080409040E1F700C0CD +:10445000000087E090EBDC018093F9019093FA0172 +:10446000A093FB01B093FC019CE088E10FB6F894A7 +:10447000A895809360000FBE90936000FFCFEF92ED +:10448000FF920F931F93CF93DF93D82FC0E08C2F11 +:104490000E94AB0A00E010E0E82EF12CC701002ECC +:1044A00002C0959587950A94E2F780FD06C00F5FDC +:1044B0001F4F0630110591F709C0602F7C2F80E057 +:1044C0000E94B80BD813F3CF81E004C0CF5FCE3089 +:1044D000F1F680E0DF91CF911F910F91FF90EF9067 +:1044E0000895CF93C82F8CE20E943F22882321F0A9 +:1044F0008C2FCF910C943F2280E0CF910895CF93E1 +:104500000E94CE23811102C00E94B4238CEF95E05B +:104510000E945207C5E6C15049F00E947F098FE30F +:104520009CE90197F1F700C00000F5CF85EF95E019 +:104530000E94520789E20E947122811113C18AE20E +:104540000E94712281110E94B42385E00E94712291 +:1045500081110E941D220E94D9238093D70187E0F8 +:104560000E9471228823A9F18BE10E947122882385 +:1045700051F08091D70181FB222720F991E0922709 +:1045800090FB81F90EC08EE00E947122882361F0B9 +:104590008091D70182FB222720F991E0922790FB9E +:1045A00082F98093D70115C080E10E947122909119 +:1045B000D701882341F093FB222720F981E082274D +:1045C00080FB93F904C0892F809580FB90F990932C +:1045D000D7018091D7010E94DD230E94EB238093B5 +:1045E000EA0180EE0E947122882341F08091EA0165 +:1045F000982F909590FB80F98093EA0189E30E94BF +:104600007122882359F08091EA0181FB222720F949 +:1046100091E0922790FB81F98093EA0182EE0E945B +:104620007122882359F08091EA0182FB222720F928 +:1046300091E0922790FB82F98093EA0186EE0E9436 +:104640007122882359F08091EA0183FB222720F907 +:1046500091E0922790FB83F98093EA0183EE0E9418 +:104660007122882359F08091EA0184FB222720F9E6 +:1046700091E0922790FB84F98093EA0185E30E9400 +:104680007122882359F08091EA0185FB222720F9C5 +:1046900091E0922790FB85F98093EA0181E30E94E3 +:1046A0007122882359F08091EA0186FB222720F9A4 +:1046B00091E0922790FB86F98093EA0181E10E94C4 +:1046C0007122882359F08091EA0187FB222720F983 +:1046D00091E0922790FB87F98093EA018091EA01AB +:1046E0000E94EF238091EA0187FB882780F980935D +:1046F0000D0187E20E947122C82F8EE10E94712273 +:104700008111C2608FE10E9471228111C46080E238 +:104710000E9471228111C86081E20E947122811180 +:10472000C06182E20E9471228111C06283E20E9414 +:1047300071228111C06484E20E947122882311F0E9 +:10474000C06802C0CC2329F08C2F0E94E6236C2F76 +:1047500003C00E94E223682F70E080E090E0CF91D8 +:104760000C94771ECF9108956DEE7EEF80E090E07F +:104770000E94B72D60E082E090E00E94A92D60E0E9 +:1047800083E090E00E94A92D60E084E090E00E9428 +:10479000A92D60E085E090E00C94A92D80E090E0E8 +:1047A0000E94A32D21E08D3E9E4F09F020E0822F34 +:1047B000089582E090E00C949B2D682F82E090E0B9 +:1047C0000C94A92D83E090E00C949B2D682F83E03E +:1047D00090E00C94A92D84E090E00C949B2D682F20 +:1047E00084E090E00C94A92D8091DF0180FF0BC044 +:1047F0006091130185E0689FB0011124759567955C +:10480000759567952BC081FF09C06091130185E004 +:10481000689FB00111247595679520C082FF07C07D +:104820006091130185E0689FB001112417C0909139 +:10483000E0019923D1F060911201961788F7209139 +:10484000130185E0289F90011124929FA001939F5E +:10485000500D112470E0CA010E946D2D6038710561 +:1048600040F46115710539F002C065E070E0862FF3 +:1048700008958FE7089581E008958091DF0180FF1A +:1048800008C06091110170E0759567957595679501 +:1048900021C081FF06C06091110170E07595679598 +:1048A00019C082FF04C06091110170E010C09091A6 +:1048B000E0019923C1F0609110019617A0F7809153 +:1048C0001101899FC001112470E00E946D2D603894 +:1048D000710528F46115710521F0862F08958FE781 +:1048E000089581E0089561E070E0F4CF803F21F405 +:1048F0000E94F423819504C0813F29F40E94F4238F +:104900008093E3010895823F21F40E94F42381956E +:1049100004C0833F29F40E94F4238093E2010895A8 +:10492000893F19F40E943D2405C08A3F31F40E945A +:104930003D2481958093E40108958B3F21F40E94EA +:104940003D24819504C08C3F29F40E943D2480932E +:10495000E5010895843F21F48091E101816017C051 +:10496000853F21F48091E101826011C0863F21F4EE +:104970008091E10184600BC0873F21F48091E101C7 +:10498000886005C0883F31F48091E10180618093A7 +:10499000E10108958D3F21F48091DF0181600BC01A +:1049A0008E3F21F48091DF01826005C08F3F29F4A2 +:1049B0008091DF0184608093DF010895803F39F4A6 +:1049C0008091E30187FF6CC01092E30169C0813FD1 +:1049D00029F48091E3011816BCF362C09091E201C2 +:1049E000823F29F497FF5CC01092E20159C0833FD7 +:1049F00019F41916CCF354C0893F41F48091E401B5 +:104A000018160CF04DC01092E4014AC08A3F29F4F8 +:104A10008091E40187FF44C0F6CF8B3F39F4809149 +:104A2000E50187FF3DC01092E5013AC08C3F29F4B3 +:104A30008091E5011816BCF333C0843F21F48091C6 +:104A4000E1018E7F17C0853F21F48091E1018D7FC8 +:104A500011C0863F21F48091E1018B7F0BC0873F1D +:104A600021F48091E101877F05C0883F31F4809176 +:104A7000E1018F7E8093E10113C08D3F21F480918D +:104A8000DF018E7F0BC08E3F21F48091DF018D7F8F +:104A900005C08F3F29F48091DF018B7F8093DF0178 +:104AA0008091E20181110EC08091E30181110AC061 +:104AB0008091E401811106C08091E501811102C05D +:104AC0001092E00108958091D70183FF7EC088E3B2 +:104AD00096E00E9452078091E1011F928F9383E339 +:104AE00096E09F938F930E94EB0781E396E00E94EC +:104AF00052078091E201282F332727FD30953F93FD +:104B00008F938EE296E09F938F930E94EB078CE247 +:104B100096E00E9452078091E301282F332727FD5A +:104B200030953F938F9389E296E09F938F930E94F5 +:104B3000EB0787E296E00E9452078091E401282F5C +:104B4000332727FD30953F938F9384E296E09F9320 +:104B50008F930E94EB0782E296E00E9452078091B9 +:104B6000E501282F332727FD30953F938F938FE161 +:104B700096E09F938F930E94EB078CE196E00E9452 +:104B800052078091E0011F928F9389E196E09F93F5 +:104B90008F930E94EB0787E196E00E945207809175 +:104BA000DF011F928F9384E196E09F938F930E9481 +:104BB000EB0781E196E00E9452078DB79EB74C96B5 +:104BC0000FB6F8949EBF0FBE8DBF81EE91E00E949C +:104BD00034150E94C2219093DE018093DD01089577 +:104BE0001F93CF93DF938091DD019091DE010E94AE +:104BF000CE21AC019091E001992321F02091140184 +:104C000030E006C0209115018AE0289F9001112410 +:104C10004217530708F486C08091E201C091E30176 +:104C2000D091E4011091E501811107C0C11176C056 +:104C3000D11174C0111172C075C09F3F19F09F5FF0 +:104C40009093E001181624F40E94F4238093E2016B +:104C50008091E20187FF05C00E94F4238195809333 +:104C6000E2011C1624F40E94F4238093E301809156 +:104C7000E30187FF05C00E94F42381958093E3013F +:104C80006091E201662339F1C091E301CC2319F16F +:104C9000772767FD7095872F972F0E94722C23E34B +:104CA00033E343E35FE30E94D62C0E943F2C6093E2 +:104CB000E2016C2F772767FD7095872F972F0E9451 +:104CC000722C23E333E343E35FE30E94D62C0E947C +:104CD0003F2C6093E3011D1624F40E943D24809331 +:104CE000E4018091E40187FF05C00E943D24819585 +:104CF0008093E401111624F40E943D248093E50181 +:104D00008091E50187FF05C00E943D248195809335 +:104D1000E501DF91CF911F910C9463259F3F09F02E +:104D20008ECF96CFDF91CF911F910895E1EEF1E004 +:104D300085E0DF011D928A95E9F71092E00110925B +:104D4000DF0108958BE598E00E9452071F9281E0F1 +:104D50008F931F9285E08F938DE098E09F938F93C0 +:104D60000E94EB070F900F900F900F900F900F90F5 +:104D700008958330E9F128F4813061F0823009F13F +:104D80000895853009F462C008F449C0863009F4FA +:104D900074C0089580911501262F30E0280F311D31 +:104DA0002F3F310524F4680F6093150103C08FEF86 +:104DB00080931501809115011F928F9386E497E0EF +:104DC00072C080911401262F30E0280F311D2F3F33 +:104DD000310524F4680F6093140103C08FEF8093B2 +:104DE0001401809114011F928F9384E397E05BC0BC +:104DF00080911301262F30E0280F311D2F3F310500 +:104E000024F4680F6093130103C08FEF80931301A4 +:104E1000809113011F928F9381E297E044C08091AB +:104E20001201262F30E0280F311D2F3F310524F4C9 +:104E3000680F6093120103C08FEF8093120180917D +:104E400012011F928F938CE097E02DC08091110189 +:104E5000262F30E0280F311D2F3F310524F4680F35 +:104E60006093110103C08FEF8093110180911101B4 +:104E70001F928F9383EF96E016C080911001262F2A +:104E800030E0280F311D2F3F310524F4680F609367 +:104E9000100103C08FEF80931001809110011F92C9 +:104EA0008F9388ED96E09F938F930E94EB070F906E +:104EB0000F900F900F900895833081F128F4813086 +:104EC00059F08230D1F00895853009F449C0B8F125 +:104ED000863009F456C0089580911501681720F4B2 +:104EE000861B8093150102C0109215018091150157 +:104EF0001F928F9389EC96E054C08091140168173B +:104F000020F4861B8093140102C01092140180913A +:104F100014011F928F9387EB96E043C08091130199 +:104F2000681720F4861B8093130102C010921301AE +:104F3000809113011F928F9384EA96E032C0809192 +:104F40001201681720F4861B8093120102C0109290 +:104F50001201809112011F928F938FE896E021C079 +:104F600080911101681720F4861B8093110102C003 +:104F700010921101809111011F928F9386E796E0A4 +:104F800010C080911001681720F4861B80931001D7 +:104F900002C010921001809110011F928F938BE537 +:104FA00096E09F938F930E94EB070F900F900F90C6 +:104FB0000F900895CF93C82F1F928F9380E699E0AA +:104FC0009F938F930E94EB0781E090E0A0E0B0E018 +:104FD000BC01CD0104C0660F771F881F991FCA95B9 +:104FE000D2F70E94771E0F900F900F900F90CF91E5 +:104FF0000C94BB1ACF938D3109F465C0B0F58E3097 +:1050000009F4CCC100F5873009F49BC1A8F48630BF +:1050100009F06DC28091D701817F8E7F8093D70187 +:1050200085E699E00E94520781EA9DE00E945207BE +:1050300081E08093E70180C1883009F44FC08B3054 +:1050400009F47CC154C2863109F4F0C138F48031CE +:1050500009F4B8C1813109F430C249C2893109F477 +:10506000CEC18B3109F486C142C2853309F437C2FF +:1050700048F4873209F433C208F433C2893209F4A0 +:105080002EC235C2833438F48A3308F02CC28833F8 +:1050900009F454C12CC2833409F421C2883409F0C4 +:1050A00026C20E94BB1A80E99DE00E9452079FEF32 +:1050B00023ED80E3915020408040E1F700C00000E4 +:1050C0000E941D2239C180EB9DE00E9452070E9480 +:1050D000F92B0E94DF140E94110D2EC185EA9DE07C +:1050E0000E94520786E79BE00E9452070E94E2233B +:1050F0001F928F9383E79BE09F938F930E94EB0710 +:1051000081E79BE00E9452070E94D923C82F8EE5B9 +:105110009BE00E9452071F92CF9389E59BE09F93EB +:105120008F930E94EB0787E59BE00E9452078DE476 +:105130009BE00E9452078C2F81701F928F938AE40C +:105140009BE09F938F930E94EB0788E49BE00E9473 +:1051500052078EE39BE00E945207C1FB882780F92B +:105160001F928F938BE39BE09F938F930E94EB079B +:1051700089E39BE00E9452078DE29BE00E94520768 +:10518000C2FB882780F91F928F938AE29BE09F934E +:105190008F930E94EB0788E29BE00E9452078FE109 +:1051A0009BE00E945207C3FBCC27C0F91F92CF930C +:1051B0008CE19BE09F938F930E94EB078AE19BE039 +:1051C0000E9452070E94EB23C82F86E09BE00E94BA +:1051D00052071F92CF9381E09BE09F938F930E9491 +:1051E000EB078FEF9AE00E94520786EE9AE00E944A +:1051F00052078C2F81701F928F9383EE9AE09F93BA +:105200008F930E94EB078DB79EB780960FB6F894E8 +:105210009EBF0FBE8DBF81EE9AE00E9452078AECBE +:105220009AE00E945207C1FB882780F91F928F9352 +:1052300087EC9AE09F938F930E94EB0785EC9AE0AE +:105240000E94520783EB9AE00E945207C2FB882714 +:1052500080F91F928F9380EB9AE09F938F930E9427 +:10526000EB078EEA9AE00E9452078CE99AE00E94CE +:105270005207C3FB882780F91F928F9389E99AE030 +:105280009F938F930E94EB0787E99AE00E94520751 +:105290008DE89AE00E945207C4FB882780F91F928C +:1052A0008F938AE89AE09F938F930E94EB0788E898 +:1052B0009AE00E94520786E79AE00E945207C5FBD7 +:1052C000882780F91F928F9383E79AE09F938F93AB +:1052D0000E94EB0781E79AE00E94520785E59AE079 +:1052E0000E945207C6FB882780F91F928F9382E5A0 +:1052F0009AE09F938F930E94EB0780E59AE00E94CB +:10530000520788E49AE00E945207C7FBCC27C0F9F5 +:105310001F92CF9385E49AE09F938F930E94EB07AF +:1053200083E49AE00E9452078DB79EB74C960FB661 +:10533000F8949EBF0FBE8DBFC1E0DEC08CE899E03F +:105340005BC08091D701C82FC17080FF09C083E87E +:105350009DE00E9452078091D701817F8E7F47C0D8 +:1053600087E79DE00E9452078091D701816080937A +:10537000D701E2CF9091D70191FBCC27C0F981E012 +:10538000C827892FC0FB81F98093D701CC2319F05E +:105390008AE69DE027C08CE59DE02EC09091D70164 +:1053A00092FBCC27C0F981E0C827892FC0FB82F986 +:1053B0008093D701CC2319F08DE49DE013C08DE3D9 +:1053C0009DE01AC09091D70193FBCC27C0F981E0F2 +:1053D000C827892FC0FB83F98093D701CC2351F0D4 +:1053E00081E39DE00E9452078091D7018160809304 +:1053F000D70182C084E29DE00E9452079DCF85E1E3 +:105400009DE00E94520789EE9CE00E9452078CEAC0 +:105410009CE00E94520785E89CE00E94520781E4CC +:105420009CE00E94520786E19CE0E6CF88E09CE089 +:105430000E9452070E94DF141F928F938EEE9BE012 +:105440009F938F930E94EB0780910C011F928F9383 +:1054500087ED9BE09F938F930E94EB0780916E01F5 +:105460001F928F9384EC9BE09F938F930E94EB0796 +:1054700080910D011F928F9381EB9BE09F938F93FF +:105480000E94EB078091D9019091DA01A091DB0194 +:10549000B091DC01BF93AF939F938F938DE99BE015 +:1054A0009F938F930E94EB078DB79EB746960FB6DA +:1054B000F8949EBF0FBE8DBF3FCF0E94BB1AC09114 +:1054C0000D0181E0C827C0930D01CC2329F083E9A9 +:1054D0009BE00E94520710C088E89BE08DCF80E0DF +:1054E00003C08D5101C089530E94DA2725CF86E879 +:1054F0009BE00E945207C0E08C2FCF91089580E07E +:10550000089580E00895CF93C82F8091E7018130FE +:1055100081F020F0823009F44FC045C1E0910E01C6 +:10552000F0910F018081813169F0823209F03DC133 +:1055300009C0E0910E01F0910F018081813111F0DD +:10554000823261F48C2F0E947F2A811104C08C2F3B +:105550000E94FA272FC081E090E02CC08C2F0E947F +:10556000812A811126C0C431E1F070F4CB3081F082 +:10557000C031D1F40E94A22688E599E00E9452072A +:1055800082E08093E70115C0C93259F0C83361F455 +:1055900085E699E00E9452078CE599E00E94520747 +:1055A00008C01092E70103C186E599E00E94520706 +:1055B000FEC081E08170FDC0C43220F5CE3108F01C +:1055C000C0C0CB3099F1C8F4C73009F0D2C08AE02E +:1055D0008093150194E19093140193E0909313014B +:1055E0008093120188E08093110188E2809310017A +:1055F0008CEF97E00E945207BFC0C33149F1C4311C +:10560000C1F0B7C0CB3409F4A9C028F4C93289F07D +:10561000C83361F0AEC0C13509F49EC0C23509F48B +:1056200099C0CE3409F0A5C06AE09EC00E94A226AF +:10563000A3C08091E601882319F01092E6019CC076 +:1056400089E098E00E94520781E08093E701B1C0B1 +:1056500083EE97E00E94520781ED97E00E94520787 +:10566000809115011F928F938EEC97E09F938F93FB +:105670000E94EB078CEC97E00E9452078AEB97E0C0 +:105680000E945207809114011F928F9387EB97E03D +:105690009F938F930E94EB0785EB97E00E94520740 +:1056A00086EA97E00E945207809113011F928F9320 +:1056B00083EA97E09F938F930E94EB0781EA97E03C +:1056C0000E94520780E997E00E94520780911201E0 +:1056D0001F928F938DE897E09F938F930E94EB0723 +:1056E0008BE897E00E94520786E797E00E945207F6 +:1056F000809111011F928F9383E797E09F938F937F +:105700000E94EB0781E797E00E9452078AE597E045 +:105710000E945207809110011F928F9387E597E0B6 +:105720009F938F930E94EB0785E597E00E945207B5 +:105730008DB79EB748960FB6F8949EBF0FBE8DBF2B +:105740001BC0CE51EC2FF0E0E15DFE4F80818093D5 +:10575000E60112C061E003C061E006C06AE080912A +:10576000E6010E94B92608C08091E6010E945C27EC +:1057700003C08AEF97E013C08091E601882369F0A7 +:105780001F928F9384EF97E09F938F930E94EB0774 +:105790000F900F900F900F9004C081EF97E00E9440 +:1057A000520781E006C01092E70180E002C080E06D +:1057B00001CFCF910895E1E8F0E080818860808397 +:1057C0008081816080838FB7F89493E09093890003 +:1057D00090ED909388008FBF0895EFE6F0E0808110 +:1057E000826080830895EFE6F0E080818D7F808382 +:1057F0000895EFE6F0E0908182E0892780830895A4 +:105800001F920F920FB60F9211242F933F934F9335 +:105810005F936F937F938F939F93AF93BF93EF9318 +:10582000FF938091E8019091E90101969093E9013D +:105830008093E801811103C082E00E94110DE09184 +:10584000E901E695E695F0E0E054F24FE4918091AD +:10585000E8018E1303C080E00E94110DFF91EF91CB +:10586000BF91AF919F918F917F916F915F914F9178 +:105870003F912F910F900FBE0F901F90189504D05D +:105880006894B1118DC0089570D088F09F5790F042 +:10589000B92F9927B751A0F0D1F0660F771F881F55 +:1058A000991F1AF0BA95C9F712C0B13081F077D0BC +:1058B000B1E0089574C0672F782F8827B85F39F05A +:1058C000B93FCCF3869577956795B395D9F73EF4B4 +:1058D00090958095709561957F4F8F4F9F4F08955C +:1058E000E89409C097FB3EF490958095709561957A +:1058F0007F4F8F4F9F4F9923A9F0F92F96E9BB2730 +:105900009395F695879577956795B795F111F8CFAB +:10591000FAF4BB0F11F460FF1BC06F5F7F4F8F4F16 +:105920009F4F16C0882311F096E911C0772321F00C +:105930009EE8872F762F05C0662371F096E8862FA4 +:1059400070E060E02AF09A95660F771F881FDAF7FB +:10595000880F9695879597F9089557FD9058440FAD +:10596000551F59F05F3F71F04795880F97FB991FBE +:1059700061F09F3F79F0879508951216130614067B +:10598000551FF2CF4695F1DF08C016161706180608 +:10599000991FF1CF86957105610508940895E894E3 +:1059A000BB2766277727CB0197F908950BD078C0DE +:1059B00069D028F06ED018F0952309F05AC05FC066 +:1059C0001124EECFCADFA0F3959FD1F3950F50E0DD +:1059D000551F629FF001729FBB27F00DB11D639FA1 +:1059E000AA27F00DB11DAA1F649F6627B00DA11D47 +:1059F000661F829F2227B00DA11D621F739FB00DED +:105A0000A11D621F839FA00D611D221F749F33275C +:105A1000A00D611D231F849F600D211D822F762FF5 +:105A20006A2F11249F5750408AF0E1F088234AF0F2 +:105A3000EE0FFF1FBB1F661F771F881F915050403E +:105A4000A9F79E3F510570F014C0AACF5F3FECF359 +:105A5000983EDCF3869577956795B795F795E7952A +:105A60009F5FC1F7FE2B880F911D9695879597F93B +:105A7000089597F99F6780E870E060E008959FEFD0 +:105A800080EC089500240A941616170618060906D5 +:105A9000089500240A9412161306140605060895A4 +:105AA000092E0394000C11F4882352F0BB0F40F42C +:105AB000BF2B11F460FF04C06F5F7F4F8F4F9F4F6C +:105AC0000895991B79E004C0991F961708F0961B5A +:105AD000881F7A95C9F78095089597FB072E16F4CD +:105AE000009407D077FD09D00E94872D07FC05D0D0 +:105AF0003EF4909581959F4F0895709561957F4FE5 +:105B00000895EE0FFF1F0590F491E02D0994AA1B54 +:105B1000BB1B51E107C0AA1FBB1FA617B70710F098 +:105B2000A61BB70B881F991F5A95A9F780959095CA +:105B3000BC01CD010895F999FECF92BD81BDF89ABF +:105B4000992780B50895A8E1B0E042E050E00C94B8 +:105B5000BE2D262FF999FECF1FBA92BD81BD20BD63 +:105B60000FB6F894FA9AF99A0FBE019608950E941A +:105B7000A92D272F0C94AA2DDC01CB01FC01F9994A +:105B8000FECF06C0F2BDE1BDF89A319600B40D9289 +:0C5B900041505040B8F70895F894FFCF42 +:105B9C002002120D030EE00DAC0D780D0101C501B4 +:105BAC0028080A03140A3F4D3620394605F904C368 +:105BBC0004A3046A04DD03F6030F0428044804015B +:0A5BCC0002030405060708090000A3 +:00000001FF -- cgit v1.2.3